• Please review our updated Terms and Rules here

Strange LSI-11 phenomenon: The duality of hardware addresses: 177xxx vs 777xxx

Christoffer

Experienced Member
Joined
Oct 15, 2014
Messages
299
Location
Denmark
Hi!

There may be a perfectly logical explaination for this, but I've messed around with writing directly from ODT to hardware registers (serial buffer, parallel line interface, etc.)
and noticed the following:

In programming, for example, the console serial port is (usually) at base address 177560 - but If I want to just write to it with ODT, writing to that address does nothing - the address is then 777560. I don't think it's a problem, because that's what it sais in the PDP-11 programming card too, I just find it weird and unintuitive.

I get that 777560 would be outside 16-bit address space and 177560 wouldn't, but inside 22-bit, but even truncating MSB's off off 777560 to fit in 16 bits would give 177560.

Can anyone pour reason on my madness? Thanks in advance!

--Chris
 
You are forgetting the presence of the memory management unit...

LSI-11 registers are 16 bits wide - so can address 64K bytes of memory.

On a 22-bit address system you have to expand the 16-bit virtual address stored in the register into a 22-bit physical address. To do this, the top 3 bits of the virtual address are used to access 1 of 8 memory mapping registers. The physical address is formed from the selected memory mapping register and the remaining 16-3=13 bits of the virtual address.

What normally happens (in the memory management registers) is that mapping register 7 is set to the physical base address of the I/O area; therefore, referencing 176560 addresses the I/O devices.

With the memory management unit switched off, register addresses 160000 upwards are 'forced' to the I/O page.

Hope this makes some sense. If it doesn't, look-up how the MMU works for more details.

Dave
 
Last edited:
Back
Top