CPU NOW GOOD, TURNING TO LOOK AT ADDITIONAL PARTS OF THE MACHINE
Because of how well the CPU seems to be free of defects, with every instruction type and variation that I tried I found it working exactly as it should. When I finish the cycle steal memory loader, I can run the exhaustive CPU test diagnostic, but I am waiting on cables. I expect to work on the loader on Saturday.
Each peripheral has controller logic built into the 1130, responsible for handling the XIO commands aimed at the device, controlling the device's operation and interfacing with interrupts, memory, cycle stealing and other aspects of the CPU. I have tested the keyboard controller logic already but for most, the peripheral device has to be functional to get the logic fully tested.
I am making good progress on restoring the console printer (typewriter) thus soon I can test out that controller logic. The disk drive, on the other hand, has quite a bit of work needed before I can spin it up to test.
This machine was configured with controllers for the 1132 line printer, the 1442 card reader/punch, and the 2501 card reader. I have the printer and the 1442 reader but do not have a 2501. I can shake down the controllers using my peripherals, that would just leave a need to fake out the logic in lieu of an actual 2501 being connected.
I decided to work on the line printer next. The cards were inserted back into the compartment (A-A1) a few days ago. I found the logic was triggering an interrupt on level 1, claiming that a line space operation had just completed. The logic used positive signals such as +Carriage Space Sw to signal when pushbuttons were activated. In SLT, an open connection is the same as a logic high, so the logic was responding to multiple pushbuttons, as far as it knew.
I temporarily blocked off the interrupt request in order to work on the keyboard issue. Now it was time to debug the controller logic itself. Rather than trying to jumper around to deal with all the inputs from the printer I decided to hook up a real printer.
CABLED UP MY 1132 PRINTER TO THE 1130
My 1132 printer was next to the VCF 1130. I didn't even need to move it around. The printer has two long cables attached with special connectors at the end. One carries all the signals between the printer and CPU, while the other carries power. The 1132 is powered from the 1130 system; it does not have its own power cord.
FOUND ONE BROKEN TRACE ON A BACKPLANE
As I was tracing down the signals that caused the 'space complete interrupt' condition, I discovered that a connection which should have existed between two pins was nonexistent. Using a wire wrap tool, I bridged the pins with some wire.
This completed a circuit to begin driving the carriage to skip and turned on that interrupt condition as well. At this point, I realized I first had to validate the correctness of the pushbuttons and other signals coming in from the 1132 to the controller logic. The circuitry is a bit odd for those buttons.
Rather than use the normal debouncer circuit (what IBM calls an integrator), an RC network to allow a signal to switch between two states and hold either level steadily, the 1132 had its own circuit design. It would charge a capacitor while the switch was in its normally closed position and then drain the capacitor and output when the switch was thrown to the normally open position.
Typical oddly drawn IBM documentation |
This produces a single pulse rather than a steady level, but that means holding a button down for a long time still only generates one pulse. Usually a single shot would be triggered by the edge of the input signal, providing the same one-pulse only effect, but the 1132 did this with discrete components and no logic gate at all. The output sits at -3V until a button is pressed, when it jumps up to 4V and rapidly declines as the capacitor is discharged.
When I get back to the shop, I will monitor every input line from the 1132 to verify that they are working correctly. I should see -3V on them while not activated and using a scope I can watch the pulse as the button is pushed.
Mention of the 1132 printer reminds me that it was basically a 407 accounting machine print unit -- correct? With 120 spinning character wheels that swing out like pendulums to strike the platen. That must have been a beast to get working. Ahh - searching a bit, I find you were restoring the 1132 back in February 2015. Has it needed any more work since? Does the fresh lube harden up in 9 years?
ReplyDeleteHi David
ReplyDeleteIndeed you are correct. Restored 407 accounting machine print units, transplanted into a modern looking sheet metal cabinet, with minimal glue circuitry surrounding it.
It was very annoying to unstick everything back then. I haven't used it in years, thus it is likely that the fresh lube wouldn't have hardened but any residual of the old stuff that was still in there may have congealed.
I am not at the point of trying it, because the 1132 is very challenging if you want to whip up a quick hand program. The typewriter, keyboard, paper tape, even the 2501 card reader are easy, requiring minimum XIO commands.
The 1132 is a very different animal. This all starts with an XIO Control command to start printing a line.
As those print wheels spin the 48 characters per wheel, each time it nears another character it triggers an interrupt. The CPU must issue an XIO Read to discover what character is available to print on any/all of the 120 columns.
The code will set up a bit mask in a fixed low storage area, one bit per column, telling the printer to fire the hammer associated with that column.
The 1132 then fetches the words from memory with the bit mask and swings those wheels against the ribbon/paper.
Therefore to print some line, the program is interrupted up to 48 times, setting up a bit mask for the columns that should print the character coming around on the print wheel.
When all the required characters have come around and been printed, the CPU issues an XIO Control command to stop the printer from the print operation on that line.
I suppose that a very simple print could be done of a single character across the line. XIO Control to start the print. Upon the first interrupt, set the bit mask for all columns. When the next interrupt arrives, issue XIO Control to stop the print. Minimum code involved. However, the character being printed is random, unless the interrupt routine waits until it sees a desired code to print across all 120 columns.
Carl
Fascinating programming challenge. I see you described it in more detail back in Sunday March 1, 2015. It seems to me it might be better to pre-scan the print line and build all 48 (at most) 8-word bit maps, before initiating the print cycle. So when the interrupt for a character comes in, all the software has to do is copy 8 words to x0120-7, and return from interrupt. The typical print line would of course have only a subset of the possible characters. Still, you would need to reserve a buffer of 8*48=384 words, which is a lot in a 16Kword machine.
ReplyDeleteI would love to read the source of the DMS print module. Is it online anywhere?
Hi David
DeleteI sent the listing of the routine that prints to the 1132 (and does other things as well, so scroll down in the listing).
The print line passed to the routine packs two characters per word thus at most 60 words for a full print line.
Carl