> On Sep 6, 2023, at 12:48 PM, Paul Koning via cctalk <cctalk@classiccmp.org> 
> wrote:
> 
> The weird case of the 11/05 is because the general registers are assigned 
> addresses 177700 through 177707 for R0 through PC, so R1 is at 177701 even 
> though it's a word wide.  On most models those addresses only work from the 
> operator console, but on the 11/05 they are also visible from the program.  
> And by special microcode hack ("just because they could", says ABC) if the PC 
> is in that range it increments by 1.


This was on the tip of my tongue because I was actually just debugging these 
very bits of microcode on a GT40 (which Scott Swazey will be demoing at VCFMW 
running “Lunar Lander” if it survives the journey there by car!)

The ALU B-leg input in the data paths on this CPU has a selection to generate 
constant +1.  In the usual cases, where the microcode needs +2 to be added to 
something, the additional +1 comes from a microcode field bit and is added in 
at the ALU least-significant-bit-slice carry input.  There is additional 
circuitry to inhibit this carry input in special cases like internal register 
address decodes, etc.

On our GT40, we had a microcode PROM failure which took out this very carry 
source bit.  Thus our GT40 PC was incrementing by just one _incorrectly_ in 
most cases where it should have been incrementing by two.  Quite a coincidence 
that your question came up soon after dealing with this :-)

    —FritzM.




Reply via email to