The µCode-Window shows commented micro-code for the PDP-11/44 CPU. The 11/44-console has a MICROSTEP command to let you step through all microinstructions of the current assembler instruction. You have to type the “M” command directly into the terminal window. After each step the current micro PC is shown. You can use this value to search for the meaning of all bits in the current micro instruction.

Before first use you must load the micro code. Press “Load” and select the file named “EY-C3012-RB-001 ......txt”. (Normally this is done for you at startup.)

µCode?

The PDP-11 processors (and many others) are logically divided in a “Control” part and a “Data Path”. Data Path is a network of CPU registers, shifters, ALU (arithmetic logical unit), UNIBUS data/address registers and similar low level data processing  components. The “Control Unit” generates signals which make the Data Path process data according to the current assembler instruction. Those signal patterns are called “micro instructions”. A list of micro instructions is a “micro program”, they are hard coded lists of bit  patterns and saved in PROM. The instruction decoder triggers for every PDP-11 instruction the appropriate sequence of micro code.
There’s also a feedback from Data Path to micro program execution, so micro programs can branch depending on signal conditions. This is called “Branch on micro test” (short “BUT”) and is used heavily to keep micro programs compact. At least “Conditional Branch” assembler instructions would not be possible without “BUT”.

 

pdp1144_ucodeprom

Splitting the CPU functions between micro code and register/ALU hardware allowed DEC to implement various types of PDP-11 CPUs with different size/price/performance characteristics. If they built more hardware into a CPU, more tasks could be executed in parallel, micro code word wide gets larger, micro programs get shorter, and overall code execution gets faster. (Modern microprocessors don’t rely on microprograms anymore, because there is enough chip area to implement nearly all instructions directly in hardware)

The µCode in the 11/44 is 56 bits wide (or 104 bits wide, if a floating point processor is attached). Since the 11/44 console has a MICROSTEP instruction, you can step through all single phases of instruction execution. Every bit in micro code corresponds to one physical printed circuit board track on the CPU hardware. Since full documentation of micro code and of CPU hardware is given in the various “Field Maintenance Print Sets” documentation, you can attach an oscilloscope or a logic analyzer to your CPU hardware and watch how data is really processed by those 100+ TTL 74Sxx chips ... If you ever wanted to understand how a bunch of TTL chips could execute software, step through your µCode!

 

pdp11gui_microcode02

PDP11GUI’s µCode window just shows the analyzed micro code for every micro instruction of 11/44. I scanned the Microcode listings, did optical character recognition and segmented the long 104 bit words according to the documentation. Bits 103:48 control the main processor, bits 47:0 control the floating point coprocessor.

Lines with bit numbers (“:”) contain bit patterns for a certain circuits in Data Path. Other lines are just informational. The Field “Source code” shows the source input for the “Micro assembler” progam which was used to generate the bit patterns.

The “Load” button loads the micro code listing into PDP11GUI. Choose the “EY-C3012-RB. ..” file. You can also download it from bitsavers.org here.

The “Next instruction” button jumps to the micro instruction pointed to by the field NEXT MICROWORD ADDRESS. But micro code often jumps to different addresses, depending on the state of Data Path signals. Then the phrase “BUT” (“branch on micro test”) appears in the “Source code” field of the current micro step. The bitfield “BUT ENABLE” selects the signals which are added over the current micro address.

You can also address the micro instruction by address or by the symbolic label the DEC engineers gave them.

Bits marked yellow do not have their default value. They usually are the “active” bits for the instruction, the default bit values may or may not be important.

Example

The screen shot shows instruction 0010, labled “1-B”. This is the first micro step for every instruction, it fetches the next word from UNIBUS into the instruction decoder. You can recognize in field “Source code” the commands “BA := PC” (transfer PC to Bus address), “DATI” (UNIBUS read cycle), “IR B := UDATA” (UNIBUS data to instruction decoder), “ISPACE” (translate virtual to physical address by instruction memory map). “J/1-C” means “Jump to 1-C”, “1-C” is the label of the next  instruction 0015 (NEXT MICROWORD ADDRESS),
If you proceed to 0015 by pressing “Next instruction”, you see that this micro step increments the PC by 2. You learn from field “ALU/BLEG CONTROL”, that “A PLUS 2” is an atomic ALU operation.
The micro step after 0015 has the address 0000. Normally it does not become executed because (invisible here) the instruction decoder PROMs add another micro code address over the 0000, so after 0015 there’s a jump to the current instructions micro code. These jump trees are documented in document MP00897, PDF pages 12ff.