• Please review our updated Terms and Rules here

How does the extended address bus (18/22 bits) work in PDP-11?

jplr

Experienced Member
Joined
Sep 3, 2022
Messages
153
Location
Brittany/France
I understand that PDP-11 has a 16 bits address bus, while there are multiple versions of QBUS and memory boards (16/18/22bits).
I know there are many ways to extend an address bus with a MMU, the most common and simple MMU is probably 74ALS610.
Please, can you explain to me how this address translation is done in PDP-11/QBUS?
Thanks!
 
It has a memory management unit built into the CPU.

The default is to map the first 28KW of physucal memory and the 4KW I/O page into the 16 bit virtual memory map to start with.

Look up APR and PDR registers in the documentation for the PDP. There are multiple sets of MMU registers (corresponding to kernel, supervisor and user modes).

Shout if you need more information.

Dave
 
Thanks Dave!
I found this for Unibus in PDP-11/45 memory management reference manual. It's quite self-explanatory.
I guess it's similar for Q22 and QBUS.

1691343640579.png
 
I thought it would be 😀!

QBUS is (not unsurprisingly) the same.

There are a couple of memory management registers as well. One of them (the most important?) switches the MMU on (after the CPU has initialised the MMU registers of course)!

The other MMU registers identify what has happened if the user attempts something that is against the MMU "policy' (as defined by the Operating System).

If the Operating System doesn't grant write access to the I/O page, then the user can't manipulate the MMU registers.

Dave
 
Thanks again Dave,
It's incredible the wealth of information there is on this forum.

> The other MMU registers identify what has happened if the user attempts something that is against the MMU "policy' (as defined by the Operating System).

This is a very smart scheme.
 
It also allows for things like stacks and data areas the "grow" automatically and for "demand loading code".

For example, trying to execute an instruction in a piece of code that has not been loaded yet. This would "fault" - indicating to the OS why. The OS could then automatically load the missing code from disk and restart the instruction that faulted. Hopefully now, it would work fine.

Dave
 
Back
Top