[Simh] DMA access to the IO page
Timothe Litt
litt at ieee.org
Thu Sep 6 17:43:49 EDT 2018
On 06-Sep-18 15:04, Mark Pizzolato wrote:
> On Thursday, September 6, 2018 at 11:33 AM, Timothe Litt wrote:
>>> On 05-Sep-18 22:13, Bob Supnik wrote:
>>> Apparently, the GT40 does this. So... problems.
>> The KDP (KMC/DUP) and KDZ (KMC/DZ) also do this. Once the KMC11
>> was available, this became a fairly popular method to off-load character
>> processing & turn character interrupts into DMA. When I did the KDP
>> emulation, Mark & I negotiated a private API rather than emulate NPR
>> to the DUP. See pdp11_kmc.c. (In the hardware, the KMC ucode runs
>> the dup (or dz) with interrupts disabled & polls the DUP/DZ CSRs often
>> enough to catch individual characters. It then DMAs validated messages
>> into memory. The polling would have been pretty expensive to emulate.)
> Along the way, while doing this, you had added the ability to access the
> I/O page via DMA.
Yes. It's a hybrid.
The private interface handles DDCMP message transport, avoiding the
character overhead. You do the framing, CRC & deliver (or accept)
messages. The KMC does the DMA.
However, the DUP CSRs are accessed by DMA for resetting/configuring the
DUP, modem control, loopback, and also to detect (via NXM) cases where
the OS tries to activate a non-existent DUP. These are infrequent, and
didn't merit a private interface.
> I'm assuming the GT40 either generates 18b addresses via Address
>> Extension bits or does the 16b -> 18b conversion itself, including
>> the IO page test. The "Unibus" does NOT do the IO page
>> recognition/sign extension to 18b. In all Unibus systems, that's
>> done in the CPU.
> That is the core problem that raised this discussion and illuminated
> the potential problems with the initial simulator DMA access to the
> I/O page.
>
> The case we were seeing only had a 16 bit addresses presented for a
> DMA memory reference. The lack of high bits 16 and 17 was either
> an implementation problem in the VT11 simulation or a bug in the
> program we're running which never programmed the high bus
> address bits. I'm leaving it to Lars to explore which of these is the
> cause. The code that is running was not captured directly from ROMs
> but was typed in from a listing in a manual. That precise code may
> not have ever actually run from a ROM in the I/O page...
Probably the former. The 11/05 doesn't have a MMU and uses 16 bit
addresses. The bus master (CPU or device) must set bits 16 & 17 for any
access to the I/O page. This is required for any Unibus peripheral to
work.
This isn't a function of where the code resides. There are two things
going on. The CPU has to fetch code from I/O space - this isn't DMA,
but it does require the CPU to set the upper PA bits. The display
processor does DMA to get graphics data - this is DMA. If the ROM code
tells the display processor to fetch from ROM, that's DMA to I/O space.
In that case, the display processor is responsible for setting the upper
PA bits.
> - Mark
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.trailing-edge.com/pipermail/simh/attachments/20180906/9e47f442/attachment.html>
More information about the Simh
mailing list