Tuesday, August 11, 2015

Mostly 1401 restoration today


I did a small bit of logic reorganization and improvement for the high speed SPI link in order to make use of the CRC generation and testing functionality I added. The CRC module makes use of a reset signal  that clears the internal generator to its initial state and an enable input to prepare it to generate CRC.


The CT 1401 system had a number of problems that we looked at. It would record a punch check immediately upon the Start button activation, while no punch instruction was issued and no activity was underway on the 1402 punch side. When punching any contents, the first column would have rows 12, 11, 1, 2, 3, 4, 5, 6, 7, 8 and 9 punched, regardless of the contents of memory location 101 which should instead be punched. Attempting to punch a groupmark character, which is BA8421 in memory and produces hollerith 12, 7 and 8 holes, instead produces the hollerith pattern 12, 5 and 8.

We still have the mystery signal line that had been causing incorrect validity checks when reading the 12-7-8 pattern (groupmark), which comes from 11 unknown cards on gate 01B7. That remains disconnected and its connection or disconnection makes no difference to any of the problems from the first paragraph.

Tracing the punch check at Start, we found a card with a shorted transistor, replaced the transistor and found that the spurious punch check no longer occurs. Testing further, we found that the problem causing column 1 to have almost every row punched is also gone, apparently caused by the same flaw.

The only remaining problem at that point was the improper decoding of BA8421 from memory into the pattern 12-5-8 on the card. The logic for choosing holes to punch on the card is a bit unusual. It involves a decision as each row of the card passes into the punch station. Remember that the card is moving through the machine so that the top edge of the card (row 12) moves through, where all 80 columns would get holes punched if the character in the punch buffer for that column requires a 12 punch. Then, it gets to the 11 row where all columns needing an 11 hole are punched. Continuing through the card, each row gets punched until it finishes with the bottom of the card, row 9.

As each row reaches the punch station, the processor logic places the row number in the A register, starting with BA for row 12 and decrementing each time the punch advances to the next row (B, A, all bits off, 1, 2, 21, 4, 41, 42, 421, 8, and finally 81 to represent the row number.

At the time when each row has been reached, the 1401 logic will read all 80 columns of memory into the B register, one at a time, and decode that character in B to decide what to punch. There is logic that looks at the current row number (register A) and the current character value (register B) to see if it matches a situation that needs a hole punched. All the various conditions (e.g. if row is 12 and the B and A bits are on in memory, fire the punch magnet) are wired together, so that any of the gates firing will put a hole in the card at the column being processed at the current row.

We removed the gate that fires the punch magnet at the time when we are at row 5 from the wire-or and put a scope on the output of the card - it was not firing. That means that the gate punching a hole in row 5 for our groupmark is not the one that is intended to drive a hole at this time. Some other gate is firing at the wrong time, meaning it should be firing at a register A value such as 7 for row 7, but is misfiring while we are at row 5.

We put the card for row 5 back in the net and began to put the extender on the card that drives the hole punch for row 7, to see if it is firing but at the wrong time. However, we got a new error symptom. Our punch buffer had 30 groupmarks in it to punch from column 1 to 30, but now the card had the bad pattern 12-5-8 in columns 1 to 11 and 20 to 30, but was producing no holes in columns 12 to 19. The logic was throwing a punch check, meaning that what was read from the card (blanks) didn't match the number of holes that should be punched for a BA8421 character. The punch check was valid, but the lack of punching was not.

We tried other characters in the locations for columns 11 to 19 but no holes were ever punched regardless of the data pattern. This is very mysterious because the punch magnet drivers are addressed by a column address decoder which outputs 18 signals - a tens position value of 1 to 8 plus a units position value of 0 to 9, which together address each of the 80 driver cards.

Even though the machine is looping through the 80 columns serially during a row, so that the punch magnets are not fired simultaneously but instead in a ripple wave from column 1 to 80, each column has a driver for its own punch magnet. The wire-or conditions for punching a hole at a particular column in this row are combined with the 18 column addressing signals to fire a given punch magnet.

A scope on the logic to select the column 12 driver showed a clean signal for the tens digit value 1, but nothing good on the input for the units digit 2. If anything it should have been the reverse.

If one of the column addressing lines were bad, the failure would either be in the ones or tens place consistently across the card - e.g. fails to punch 2, 12, 22, 32 etc or fails to punch 30 to 39. we were set to test the driving for the tens position value 1 when the problem got worse. The machine began to skip punching holes for all columns from 1 to 16. At this point we had to leave. 

No comments:

Post a Comment