PDP-11 addressing question and a model round-up

From: Paul Koning <pkoning_at_equallogic.com>
Date: Mon Feb 14 09:53:58 2005

>>>>> "Vintage" == Vintage Computer Festival <vcf_at_siconic.com> writes:

 Vintage> I didn't want to spend time researching this since it's not
 Vintage> that important and I figure I can get a quick answer here.

 Vintage> With the MXV21 controller I have, I needed to poke words
 Vintage> into its registers to format a disk. The manual instructed
 Vintage> to poke the words in the 177xxx range. But when I tried
 Vintage> this nothing happened. I scratched my head and then
 Vintage> remembered from a previous helpful message someone talked
 Vintage> about how the addresses also map to higher memory sometimes.
 Vintage> So I tried poking the words in the equivalent 377xxx range
 Vintage> and it worked. What's going on here?

It's very strange that 377xxx would help, though certainly 777xxx

The trouble is that PDP11s have addresses in at least two and
sometimes three sizes.

Program addresses are always 16 bits.

Addresses that appear on memory and I/O buses are either 18 or 22
bits. Originally they were 18 bits. Also, at first (11/20, 10, 05)
the relationship between program and physical address was fixed: for
program addresses 176000 and up, you'd get physical 776000 and up.
All addresses below 176000 would come across unchanged.

That upper 8 kB block (better known as 4k word block in the PDP11
word) is the "I/O page" because that's where device CSRs are found.
The space below it is for memory.

So even though the 11/20 could only address 28 k words of memory, the
I/O bus would support 124 k words (18 bits minus the 4k I/O space).

The console has always used physical addresses, whether it's a lights
and swiches type or a serial port console. So you'd touch I/O
registers by their 18 bit (or, on machines that have it, 22 bit)
address. (I think there are a few machines where the serial console
can be told to interpret an address as either physical or virtual; I
may be confused...)

Life gets more complicated in 22-bit unibus machines, because there
you have 22 bit physical (memory) addresses, yet 18 bit addresses on
the I/O bus (the Unibus). So those 18 bit addresses are virtual, they
are mapped to physical addresses via the Unibus map. Q-bus systems
avoid this hassle by using full 22 bit physical addresses on the I/O
bus. (And Unibus systems do that partway -- Massbus adapters hook
right into the memory so they handle 22 bit addresses directly, not
via the Unibus map.)
Received on Mon Feb 14 2005 - 09:53:58 GMT

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:37:38 BST