• Please review our updated Terms and Rules here

Pdp 11/45

This ended up being kind of a long (rambling?) post, so if it's not helpful - just skip it and maybe save it for later.

CPU troubleshooting is almost an exercise in clairvoyance. You're sitting there trying to psyche-out what's going on inside the machine. (I get off on it because it's a kind of ZEN exercise) Often it requires a lot of specific knowledge about how it's constructed.

But there are generalizations that can often help one narrow down what direction to investigate.

The simplest program is a HALT. Second is probably an unconditional BRANCH to self and the NOP. All are single word instructions and are unambiguous on any PDP-11. (some PC self referencing instructions are notorious for executing differently on different PDP-11 family members - so I avoid these unless I know specifically what to expect)

In choosing an instruction you might think about what's involved to execute it:

  • Is it "Conditional" or "Absoute" (requiring no evaluation)
  • Is it "Short" (one word) or "Long" (Multiple word)
  • Does it reference an internal CPU register? (beyond the PC)
  • Does it reference memory? (other than the instruction's memory)
  • Does it require stack or use the stack pointer?
  • Does execution involve the ALU? (Add, Subtract, Multiply, Divide)

Whichever you choose, try to look for evidence that it is indeed happening as you expect. If using a scope or logic analyzer - ask yourself: how will I trigger it to visualize what's happening?

In my troubleshooting I attempt to assure memory integrity first. It's easy to do and eliminates a huge number of unknowns. Follow this with unconditional branches of various types... which takes us immediately to Loops.

  • Can I watch the CPU execute a loop with my equipment?
  • Do the console lights bear it out correctly?
  • Can I pause and restart it via the console?


Once the basics are established, one of my favorite "first light" programs is a memory scan. A loop that does nothing but read all of memory sequentially. On a PDP-11 this is not as simple as some other machines. For example: PDP-11 systems often go through undesirable gymnastics when a memory area is read that doesn't exist in hardware. This makes it necessary to design the loop to focus on memory locations that do exist. So, some conditional instructions need to be working. Another alternative would be for the test program to handle the "gymnastics" as I put it - by ignoring the error and continuing. This in turn requires interrupts and stack to be functional.

This isn't intended as a laundry list... only as an example of how to think it through. Start simple and target a particular behavior you can prove.

Being unfamiliar with the instruction set is a handicap, especially if you're trying to learn it and diagnose a machine at the same time TOGETHER. Having a PC simulated PDP-11 can be helpful - but it's limited to instruction help and isn't testable with the same tools as your real system.

Your mind is dealing with a lot of unknowns at the same time. My advice is to break it down to one element at a time. Pick an instruction and learn it completely. Run it, test it, watch it execute. Play with it until you're sure you understand it and have proved it to yourself.

It's clear you have tremendous tenacity and perseverance. This work will take time - a lot of it. That's ok - Let it. You'll end up with your head inside these machines in a way that is most uncommon. Fun - is contagious.

~~

After this phase, you'll eventually want to avail yourself of DEC written Diagnostics. (unless you plan to learn and test every instruction manually - an exercise [exorcise?] I wouldn't put past you!) Have you thought about how that might be done? Will they be sent via a serial console to your system or do you have some mass storage on it? These are more questions for later, but answering them now will help us (me) understand what possibilities might exist for you.
 
Last edited:
Hi All;
RSX11M, Your a Gem, THANK YOU.. What You have posted is Very Helpful, and that You have taken the time to do so, I Thank You for that.. Its Rambling like Yours that HELPS me the MOST !!!
For Now, I still need to chase small demons..

""Whichever you choose, try to look for evidence that it is indeed happening as you expect. If using a scope or logic analyzer - ask yourself: how will I trigger it to visualize what's happening?

In my troubleshooting I attempt to assure memory integrity first. It's easy to do and eliminates a huge number of unknowns. Follow this with unconditional branches of various types... which takes us immediately to Loops.

Can I watch the CPU execute a loop with my equipment?
Do the console lights bear it out correctly?
Can I pause and restart it via the console?""

This Makes the whole Post worth having Just this as a troubleshooting guide !!! THANK YOU !!!!

Memory does work, which is Great !!! And very Important..
Next, I need to find out IF I can actually Read and Modify any of the Registers..
I have a second GRA Board, also, find out if REG EXAM is working, and if DISPLAY REGISTER is working..
I have been looking through the Instructions and what I would like is a MOV instruction that does an Address to Address Move.. I think it is MOVB, but I need to figure out how to set it up and get it to actually work..
But, as You said, I need to verify some of the smaller and simpler Instructions Halt, NOP, and a BRANCH, (And I'LL add) JUMP to that list and so that looks like a few reasonable Instructions to see and get working first..
The "CPU Maintenance Manual" is right Now very helpful, and I am looking at it, at the present.. It also tells me what lights (Leds) do what, along with what switches do what and How to set up the machine switch wise..
THANK YOU Marty
 
Last edited:
Hi All;
Something that has been bothering me for awhile, is I do not have any RUN Led turn on when I try to Start a program, such as the 777, Deposited at Location '000000.. It did light up the PAUSE Led though.. And the Documentation says that the Pause Led lights because it is waiting for the UniBus to Finish..
So, Looking at the Print Set, it shows that going from the slot 1 Terminator before it gets to slot 26 (UniBus A), it passes through the M787 Line Clock Module, otherwise if it is not there connect lines R2 to V2 of Row C.. Well I had an M787 plugged in and so I thought I was covered in that respect..
Not, so, that is IF the Module is working correctly.. So, I Took Out four Ic's that might affect it and on that Module I jumpered R2 to V2..
And BEHOLD, I have the RUN Led now coming on, along with the PAUSE Led as well, But it seems like it Now is executing that instruction (MAYBE) !!
THANK YOU Marty
 
Hi All;
IT Looks like it is Running, I Deposited '772 at Location '000000 and at location 000012 I deposited '777, and started it and the RUN Led is on, as well as the Pause Led..
But, more importantly On the Address Leds 1 and 3 are solid and 2 is Dim, and on the Data Leds 2 and 3 are solid and 1 is Dim, I think this is indicating that it is in fact doing the Jumping back and forth..
THANK YOU Marty
 
Hi All;
When looking for display registers by address 777700, I got nothing but a buss Address error, so trying each location, I stumbled upon address 777600 and then it gives me something on the Data Leds coming from SomeWhere, I get Data from 777600 thru 777776, but no other locations, not 773000, nor 765000...
Does AnyOne know what this Range is getting it's DATA from ??
THANK YOU Marty
 
Hi All;
When looking for display registers by address 777700, I got nothing but a buss Address error, so trying each location, I stumbled upon address 777600 and then it gives me something on the Data Leds coming from SomeWhere, I get Data from 777600 thru 777776, but no other locations, not 773000, nor 765000...
Does AnyOne know what this Range is getting it's DATA from ??
THANK YOU Marty

11/45 handbook, page 160
memory mangement unit registers

if you want to look at the registers, use the "reg exam" switch (page 199)
 
Hi All;
AL, Yea You came thru, Again.. THANK YOU !!!
As near as I can tell my Register Display (Examine) DOESN'T Work.. And that was Why I was trying to do it by address.. Yes, its on the list of things to get working.. I'LL look at 777560 and see..
No Address Error at 777560..
In the M9312 printout, it shows on page 5-3 that using it in extended mode was at address 177xxx, and so I thought that that was where the Register were for memory management.. At least that was where this manual led me to believe it was located at.. So, THANK YOU AL for correcting me..
I have to go for a little while, be back in an hour or so..
I'm Back..
THANK YOU Marty
 
Last edited:
ODTX Listing

ODTX Listing

On the subject of instruction set: I might also suggest looking at program examples. Listings that include the assembly output are particularly helpful to learn the instruction set at an OPCODE level.

Paper Tape ODT is an excellent one - and I'm sure we can locate it for you. Some of the things in that listing are a bit advanced, but you'll catch on.

It may also prove useful later for program debugging or serial transfer.

Please have a look at these:


ODTX Listing:

I couldn't easily locate the original unmodified DEC ODTX listing. (it's on tape here) What I can provide is a listing for an ODTX which I modified to execute on one of my T11 CPU prototypes for a CUSTOM BUS.

As such, the program has changes made by me which are clearly indicated in the listing by my initials. These sections were modified either to use the CUSTOM serial interface hardware of that non-standard BUS or to adapt the program to a T11 chip, or run from ROM in my CPU. (ODTX was originally intended to be run from RAM and was self modifying)

Still these changes are very limited and do not detract from the overall understanding of the instruction set. The program was not modified in any way to alter the functions of ODTX from that in the manuals above - so they continue to be an additional reference.

I'll continue to be on the lookout for ODTX.LST in it's original form and as a downloadable binary.

In the meantime, please download and print this version ODTX.LST from 1985. As you go over it, I suggest you take notes and hand mark it.

Update: I did find the original unmodified ODTX source file on bitsavers: dec-11-uodxa-a-pa.bin so those able to do their own compilation can obtain a listing. Please refer to MACRO-11 assembly directives in my modified version for guidance.

Note that the loadable binary appears to be there also.
 
Last edited:
Hi All;
Thank You RSX11M, Yeah, I could use alot of listings at the present.. Especially If they are small, at the present..
On another thought.. I would like to be Able to access the M9312 Board Diagnostics, located according to the Documentation at 165020, But in Memory Management Mode somewhere else.. Because they supposedly have Diagnostic Routines, that at least some of them I could run on the /45 and say that if it passes a certain test, that at least that part of the System/processor works..
THANK YOU Marty
 
Hi All;
RSX11M, You don't know it until NOW, but You have made my day !!!!!
I have already Loaded one of these files and I had printed it out, but the other one, was unloadable from BitSavers for what ever reason.. AnyWay, I was looking at the Index and Behold it mentions the M873 Board, and so I go there and I now have the address for accessing it, which I had asked for before, but was Unable to find anyone who had that information.. so, THANK YOU !!!
THANK YOU Marty
 
Last edited:
...the other one, was unloadable from BitSavers for what ever reason...

That's disappointing. I changed one of the links on speculation which might have been troublesome. See if it works now, otherwise please post which is broken for you and I'll figure something out. They all worked for me.

Yes - those manuals are absolute Gems! Studying listings from absolute mode compiles helps beyond measure absorbing the instruction set. Both provide a point of view that helps one understand how to think about the root generation of PDP-11 machines and provide a foundation to appreciate the entire family's evolution over time. Reading them is like bathing in knowledge - just keep sloshing the stuff on and it will soak in.

Most people miss out on this perspective Marty, jumping in at the QBUS generation. They never stumble upon these or get what they've missed. Consider yourself one of the few. For me - I'm just grateful this stuff isn't lost to posterity. We owe so much to Bitsavers!
 
Last edited:
Hi All;
RSX11M, Not Your Link !!!! Your Link was the one that went thru.. I was talking about a few months when I was looking in BitSavers for Documents that I might need for either the /40 or for the /45..
!!!!!!!!!!!!!!!!!!!!! We owe so much to Bitsavers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I'LL Second that ..
THANK YOU Marty
 
Hi All;
I Got Both of my Boards, that I have been expecting.. So, Now I can Build my SJB Board on a plug in BreadBoard.. No, more Cables for this one..
THANK YOU Marty
 
Hi All;
I have set the switches on my M7856 Interface Board, and will next try to Hook up the DB-25 RS 232 Connector to it.. The Last time I tried this I blew up the /40, only that was on an M7800 Board.. The M7856 has been plugged into the UniBus slot 26 for a number of Days, so hopeFully all is OK with it.. Once I get the wires hooked up and have NO Smoke Signals, I can then hook it up to my PC and see IF the Pc will work with the PDP..
THANK YOU Marty
 
Hi All;
I have attached the Wires, and I am Ready for the "Smoke Test" !!!!!
I am going to Plug it in while still Online, that Way You will know the Outcome almost as soon as I do..
No SMOKE so far, and the Run light is partially on..
THANK YOU Marty
 
Its been running for awhile, and all seems to be OK !!!!
Can AnyOne either give me a short Program to Output an "A" to the Terminal, or tell me where to find such an animal..
Its funny that in the Manual they Don't give You that, something like an Echo program to check out your Newly installed Board.. Maybe that was what the Field Tech's were for..
THANK YOU marty
 
Assuming your DL11-W is at the console SLU address of 777560, use the switch register to deposit 101 to 777566. Remember you'll need a null-modem RS232 cable.

Characters sent from the terminal on that port should appear when reading 777562.


Now we've located the source code for ODTX, would it be any use if I compiled a listing for it?
 
Last edited:
Back
Top