Thursday, May 21, 2026

Attempting to make the 1053 Emulator usable for SSM in time for their pickup of typewriter tomorrow

RESOLVING FLAWS RAPIDLY IS POSSIBLE

The issues I identified with the feedback signals should be resolved with some simple MOSFET switch board rework. The missing line feed is fixed already. The only behavior I still need to investigate is why the ANSI colors aren't working as expected. That seems likely to be easy to resolve too. 

DEALING WITH GENDER MISMATCH IS A CHALLENGE IN THE TIMEFRAME

The physical connection issue is what worries me. The 1053 printer comes with two SMS signal connections - one is a male paddle card and one is a female socket. My emulator however has two male SMS paddle cards. 

I can temporarily fix this by using an IBM SMS gender adapter, a molded device into which two male paddle cards are plugged. In fact, the SMS signal block into which the 1053 plugs has one such adapter already. A male card from the 1130 logic plugs into the adapter, then the male card from the 1053 plugs into the other side. 

The 1130 logic has a second male paddle card, which is plugged into the female socket on the cable that comes from the 1053. When I add a second adapter, I can plug my second male paddle card into the adapter and connect to the second male card from the 1130 logic. 

The only tricky part is that the adapter reverses pads. The leftmost pad on an SMS card is A, the rightmost is R. However, through the adapter, what is on pad A on a card plugged in will be connected to pad R on the other male card plugged in. I have to invert the male paddle card from my emulator to plug it into the adapter in order to get my signal line on pad A to connect to the 1130's paddle card pad A. 

I don't have spare adapter devices. I had to borrow the one from my own 1130 system, the one that normally connects the male 1053 cable to the male 1130 logic cable in the SMS signal block. That leaves my system unable to use its console printer, so I can't loan this to the System Source Museum when I loan them the emulator. 

If I am able to put together a usable emulator by Friday afternoon, I will have to cobble together a female paddle card socket and wire that to my emulator tomorrow. I have a start on this with some experimental work I did, but it is pretty crude and unfinished. We will see if I can pull this off by 4PM tomorrow.

Debugging my 1053 printer emulator box

DESIGNED AND BUILT THIS FOR LAB USE A FEW YEARS AGO

The 1053 attaches to a mainframe with three SMS paddle cards - two carry signals and the third delivers power. This emulator is built around an Arduino Mega 2560 R3, a MOSFET switching board and some simple circuitry, hooked to three SMS paddle cards. It provides a serial port connection over a USB cable for communicating with a terminal emulator program on a personal computer to display the output that is being 'typed' by the mainframe.  

This emulates the console typeball that is installed on an IBM 1130 system, but can be easily modified to support a different (or additional) typeballs. The typeball has characters that are not in standard ASCII, e.g.  ¬ and ¢ which can be displayed in UTF8.

Using a terminal emulator that supports UTF8 encoding and ANSI colors provides the most realistic output, since the text will display in either black or red on white background - the text color is selectable by ribbon shift commands from the mainframe to the 1053. I have had good results with The terminal emulator PUTTY, set for 9600 baud. The code offers a few commands that can be issued to the PC1053 - mainly to set the left and right margins, but also to set, clear and display tab stop columns that will be in effect. 

PC1053 operates at approximately the same timing as a 1053, which supported a maximum of 15.5 characters per second and with the high speed carrier return feature would move from right to left edge in just a bit over 1 second. This provides realistic timing on the feedback signals that tell the mainframe when the Selectric mechanism is busy in a print cycle or performing an operation such as shifting case or moving to a new line. 

The device is constructed in a case with a three digit display to show the current column that the typeball/carrier has reached. It has buttons on the front to match the controls on a real 1053 - buttons to Tab, Space and Return, plus tab Set and Clear. This project has a Fritzing diagram of the connections, a schematic of the MOSFET switch board and other circuits, while the physical layout of the case is left as an exercise for the reader. 

TESTING THE 1053 EMULATOR

I connected the 1053 Emulator to the VCF 1130 to check out its operating condition before loaning it to the System Source Museum. The one challenge I had was that my emulator had two male SMS paddle cables for signals, but the 1053 itself has one male and one female card. Thus I needed to use a Female to Female adapter from my own 1053 just to complete the testing. I tested the signal connections to be sure that the pad reversal of the adapter wasn't crossing signals; soon I had everything connected between emulator and 1130 according to the design. 

FOUND A FEW FLAWS

Immediately I found that the END OF FORMS lamp on the console was lit, which makes the typewriter not ready for operation. The controller logic inside the 1130 won't work properly with that error state. My emulator should tell the controller that forms are good, thus ready for printing. 

I began testing anyway since I saw that my little hand program to write to the console printer was seeing the print codes when I did an XIO Write. The controller hangs up after the first write - must be an issue with the response signals back to the 1130, but it could also be due to the forms error condition. 

I saw the proper characters on the terminal screen for all the letters, numerals and special characters on the lower case hemisphere of the typeball. Any time I entered a code on the upper case side, the controller fired off a shift command which failed to complete, thus it would not type any character on that side. 

I felt good about the translation and display of the characters, even the cents sign which is not part of normal ASCII but is being displayed using UTF-8 unicode encoding of the characters. The column pointer was advancing properly, showing where the carrier would be sitting if it were a real printer. 

Space, backspace, line feed (new line) and tab seemed to work just fine. When I issued a carriage return command, which should also be triggering a line feed, I only saw the cursor return to the beginning of the same line. This happens even when I push the Return button on the emulated printer console (actually on my emulator box). I suspect this is a simple flaw in my Arduino code inside the emulator. 

I tried the commands to shift to red ink and shift to black ink, but the output on the terminal did not change. This may be a remnant of the issue caused the the forms error, but it could also be a defect in my code. I do remember this working properly on the bench, so it could also be a flaw in detecting the shift to xxx ink commands. 

DEBUGGING THE FORMS LIGHT ISSUE AND LACK OF FEEDBACK SIGNALS

The hidden analog circuits inside the IBM 1130 logic cards were the reason that my MOSFET switched feedback signals including end of forms were not working as expected. IBM debounces these with a circuit that pulls the +12V line down to -3V, with resistors in that circuit acting as a voltage divider, so that without the 12V applied, the line will activate the next logic gate. 

My problem was the 4.7K pullup resistor in my circuit - the line from the emulator to the 1130 passes through a 470 ohm resistor before entering the debouncer (voltage divider) and the result was always seen as a logic low by the following 1130 gates. Switching my resistor to a 470 ohm pullup gave me exactly the results I wanted. The forms condition went away.

I have to make similar changes to the other three MOSFET switch circuits in order to be recognized by the 1130 debouncers and ensuing logic gates as validly high or low. Once the controller triggers a set of solenoids in the 1053, it expects to see the two feedback signals change (-TWR CB RESPONSE and +TWR CRLFT INLK). 

-TWR CB RESPONSE should dip from +48V to ground for any print or operations cycle, except for the commands to change the ribbon use between black and red ink stripes. If my signals don't return to logical high then the controller believes the typewriter mechanism is stalled and won't continue. 

+TWR CRLFT INLK will rise from logic low to logic high with +12V delivered during the times that a carrier return, a line feed or a tab movement are underway. Due to the high resistors I used, it will never be seen as reaching the high state, nor will the other feedback signal. 

Its a fairly trivial rework of the MOSFET switch board. The new 470 ohm resistors will consume about 300 milliwatts of power if steadily on, for the three signals that switch between 12V and ground. The 48V signal, with a 470 ohm resistor, would consume 5W when the output needs to be at ground level. 

That only occurs during a cycle, when typing or moving, otherwise relatively little power required. During times of rapid typing the average power use will be about 2 1/4 Watts maximum, although if the typewriter mechanism stalls or jams it could jump up to the full 5W for some time. I will make use of a suitable high power resistor. 

FIXED THE FAILURE TO MOVE THE LINE DOWN DURING A CARRIER RETURN

I simply forgot to print the 0x10 character (new line) after the 0x13 (carrier return) in the emulator code. It was added and corrected the problem. 

BUILDING SMS ADAPTER HOUSING

I had built some SMS paddle card PCBs previously and realized that I could use one of them to create a female SMS socket to put onto my 1053 emulator in lieu of the male paddle card. What I needed was a housing to hold my male paddle card in place with room for another male card to be inserted parallel to the first. I would add some springy contacts soldered to the pads of the male paddle card, thus giving contact when the second male card is inserted into the housing.

I had to secure my own male card in the housing, so that we had a female socket with the combination of my male card and the housing. I fired up FreeCAD and designed a housing that could be 3D printed. 

On challenge using the adapters is that the way IBM built them, they reverse the pads from one side to the other. Pad A on one side is pad R on the other, pad B is pad Q, and so forth. This can be confusing when dealing with signals on the two paddle cards being joined.


Conquered 1053 rotate turnbuckle adjustment problems, wrapped up the printer

FINALLY GOT THE FINE ALIGNMENT DONE IN SPITE OF THE TURNBUCKLE

One of the earliest steps in the rotate alignment process is preliminary homing, where the typeball position is set approximately right. It involves accessing the carrier from underneath, with it sitting about 4/5 of the way to the left margin so that there is a hole through the mechanism underneath. A setscrew with a Bristol head is loosened, after which you turn the typeball from the top and then get back under to tighten the setscrew. 

Because the turnbuckle system was not converging on a good setting, I decided to use the preliminary method as my final alignment instead of trying to change the length of the rotate rod using the turnbuckle. It only took a couple of tries to get the detent entering the teeth of the typeball right where I wanted it.  

I also tweaked the tension adjustment for the string that activates the ribbon color shift, ensuring that it selects cleanly between the black (bottom) stripe and the red (top) stripe of the ribbon based on the solenoids that set the type color. 

PRINTER CONNECTED TO THE 1130 AND EXERCISED ONE LAST TIME

I plugged the printer into the VCF 1130 and used my short hand entered program to test out its operation. It selected all the characters properly and shifted colors well. Once I was happy with its behavior and its condition, it was ready to go. 

WRAPPED UP AND READY FOR PICKUP

I put on the case and wrapped it up in some padding as it will ride in the trunk of the museum manager who will come by to pick it up. I added a bit of cable lacing string to one lever that is otherwise a real pain to connect to the faceplate of the printer. 

The faceplate of the printer has the console entry switches on it, but the wiring does not have a connector that allows easy detachment from the 1130 system. Therefore, before bringing the printer to me, the System Source Museum unscrewed the faceplate and left it with the system in Maryland.

A small rod runs from the right rear of the machine, when viewed from the front, to attach to a lever on the faceplate. This sets or clears the tab stop at the carrier's current column position. There is not enough room to get hands or fingers inside when the faceplate is being attached - at least not to grab that rod and attach it. A ballet with forceps and other tools is about the best one can expect. Often the rod falls down and requires removal of the typewriter cover to recover from that state. 

However, I wrapped the lacing cord around the end of the rod, and taped it to the top of the printer top cover. That will allow whoever will reinstall the faceplate to hold the rod up and be able to get to it with pliers, forceps or whatever is needed. 

Ran SSM 1053 to stretch tilt/rotate tapes, making final adjustments

DECIDED TO HOOK THE 1053 TO AN 1130 TO CHECK IT OUT

I read some advice on Selectric repair forums that the metal bands that tilt and rotate the type ball tend to stretch a bit when first used under power, so I plugged the printer into the VCF 1130 instead of its own 1053. I used a quick hand entered program to type characters and commands, discovering that the tilt tape did stretch a bit from how it had been adjusted. 

NEEDED TO REALIGN THE TILT MECHANISM

The result was that the tilt position being selected is now one row off - a character in tilt 3 row would instead type the character at the same rotation but in tilt row 2.  This required a quick removal of the cover and a readjustment of the tilt alignment to restore the printer to correct selection. I also saw that the rotate positions, which I had carefully set during my earlier alignment, had gone amok. 

ROTATE ALIGNMENT - ARRGGGGGHHHH

I whipped through the rotate adjustments, up to the the last step which is to complete a fine adjustment of the rotation position just as the print cycle begins to activate the detent to hold the ball in place. This is seemingly easy, at least on paper, but was maddening today.

There is a rod that comes from the selection mechanism, pushed or pulled to the eleven positions of rotation. It attaches to the bottom of a lever on the left side of the machine that has the rotate tape pulley on its top. The rod is built with two threaded pieces and a turnbuckle that joins them. The screw threads are in opposite directions on the two pieces, thus the turnbuckle shortens or lengthens the rod.

I had the machine dialed in perfectly, selecting every rotation column correctly, good on both hemispheres. The last step is to adjust that rod so that the detent enters the typeball teeth at about halfway down the right slope if viewing the teeth from the back of the machine. You select a character and hand crank the machine halfway through a print cycle, so that the detent is engaged in the typeball. 

You then hold clockwise pressure on the typeball and withdraw the detent, to see where the detent meets the right slope. Adjusting the turnbuckle should move the point of contact right or left. The turnbuckle has two nuts holding it in place, one screwed against each side of the turnbuckle. Loosen the nuts, turn the turnbuckle, watch the detent position and tighten when correct.

In theory.

Each time I adjusted the turnbuckle to achieve a good positioning of the detent into the teeth, I would carefully tighten the nuts against the turnbuckle. When I check after this, the positioning is way off - the detent comes down right on the bottom of the tooth, in between two columns. 

I did this many times. I tried experiments with the order of tightening the nuts. I tried to anticipate the effect of the nuts on the rod. Failure after failure. The machine seems to return to the same bad positioning regardless of how I set the rod length with the turnbuckle, at least once I tighten the nuts ever so gently. 

The urge to superglue the turnbuckle in its correct place without the nuts tightened is a challenge hard to resist, because the next time the printer needs service or adjustment the turnbuckle will need to turn once again. 

RIBBON COLOR CABLE TENSION ADJUSTED

The printer supports dual color typing, with a cable that is tensioned by a pair of solenoids to select between two levels of pull, transferring that tension to a lever inside the carriage that controls the amount that the ribbon lifts during a print cycle - either to the red or the black stripe of the ribbon. Another easy adjustment. 


Tuesday, May 19, 2026

Finished work on System Source Museum 1053 console printer

TEDIUM PAYS OFF EVENTUALLY - THE TYPEWRITER WORKS WELL

After I exited the loop of adjustments when all character positions were selecting properly in both upper and lower case hemispheres of the type element, I had just one final area to tune up. The 1053 has microswitches at key points in the mechanism to provide feedback to the controller logic inside the IBM 1130 system. These have to be set to fairly exacting points of the mechanical movement, otherwise the controller might start another character print or movement when the typewriter is not in a good position to accommodate it. 

One set are meant to protect the typewriter during 'long' operations. These are movements that take a variable amount of time to complete and are much longer than a single print or shift cycle. For instance, the time for a Tab movement to finish depends on which column we start from and how far away is the next column with a tab set. Similarly, carrier return time depends on how far to the right we were when it is started. 

The other inform the controller when the rotation of the mechanism is at a sensitive point where further commands shouldn't be attempted and then when the mechanism reaches a point where it could again accept requests. Typing a single character involves starting the print cycle from a standing start, moving the type ball and then coming to a stop. 

It is possible to stream an additional character before the print cycle stops, so that the clutch never stops it. The mechanism just continues around in another cycle. This allows the typewriter to reach its maximum speed of just over 15 characters per second, as it is considerably slower if it has to start and stop for each printed character. 

Shifting between upper and lower hemispheres consumes one print cycle, so the actual max printing speed also depends on the specific characters being typed - at worst case it will only print a bit less than 8 characters a second (if a shift is needed between each character). 

I was finally satisfied with its behavior and performance. I put the covers back on and wrapped it up, ready to be brought back to Maryland and enjoyed by museum visitors. 

PRINTER ADJUSTMENTS ARE FINALIZED, READY TO SEND THE UNIT BACK

I was happy to call them and let them know the console printer is ready for pickup. They can get their 1130 back in operation soon. The pickup is this Friday. 

ALSO LOANING A 1053 SIMULATOR FOR TIMES WHEN THE PRINTER FAILS

I designed and built a simulator that plugs into the IBM 1130 and replaces the connections to the 1053 console printer. It delivers the output of the printer over a USB serial link to a terminal or computer where the same results will be seen as would be printed on paper by the printer. 

It provides the same ability to set tab positions, left and right margins, offers a display of the current print column along the line, offers the same return, tab and space buttons for manual interaction, and displays the full character set in both red and black ink. 

It had been initially built with relay boards driven by an Arduino Mega 2560 to provide the feedback signals to the 1130, but the performance of the relays was not sufficient to meet the signal timing produced by the I/O Selectric printer mechanism. With each print cycle taking about 65 milliseconds, the -TWR CB RESPONSE signal would need to drop from 48V to 0 at 7.22 ms into the cycle and return back to 48V by the 43 ms point. 

The relay boards I initially used require up to 15ms to turn on and up to 10ms to turn off. That would have delayed the signal above until 22 ms into the print cycle, way past the safe point where further commands could be issued. Further, it would remain off until 53 ms. Generally these are acceptable for switching rates up to 10 per second, but the 1053 can exceed 15 cycles per second. 

Due to the high speed requirements, I whipped up a small board with four MOSFET switches to instead drive the feedback signals - due to their 12V and 48V levels the Arduino can't directly drive them. A quick check on the breadboard verified the suitability, with the IRF520N transistors I had in the shop turning on and off in mere nanoseconds, approximately a million times faster than the relays could operate. 

The 1053 has two SMS paddle cards that plug into the signal SMS connector block of the 1130 and one SMS power paddle card that plugs into the power SMS block. These are swapped with the cards from my simulator to make use of the simulator instead of the physical typewriter. 

I am loaning the 1053 simulator for an indefinite period to allow the System Source Museum to demonstrate their IBM 1130 even when the console printer, the most trouble-prone part of the system, is inoperative. This also saves on paper use since the paper forms needed for the 1053 have to be custom manufactured and thus are expensive. 

Diagnosed failure point of Calcomp 565 plotter carriage stepper circuit

SINGLE POINT OF FAILURE MUST BE SHORTED TRANSISTOR

The symptoms were that the ring counter was not advancing in either direction. That implied a single failed component must cause this since different parts were involved in moving based on the direction. 

The ring counter has three stages, each driving one coil of a stepper motor. The design is such that only one of the three stages has its output conducting at any time. A request to shift the ring counter comes in through two paths, one to shift to the right and the other to shift to the left. 

If we imagine that the ring counter is currently operating with the first stage active, then a shift right pulse will be passed only to the trigger transistor of the second stage. A shift left pulse is passed only to the trigger transistor of the stage 3. 

The one stage that is conducting permits the shift pulse to be passed to the next stage. When a pulse turns on the next stage, the voltage at the conducting transistor forces the other two stages to turn off. 

I verified that the output transistor for stage 1 was conducting and that it was passing the shift right pulse to the trigger transistor of stage 2. However, stage 2 did not switch on, there was only a very short blip. Further, since it did not switch on, stage 1 was not forced to turn off. That might look as if it could be caused by a bad trigger transistor for stage 2, except that the same failure occurs with a shift left pulse which involves a completely different stage and trigger transistor. 

If, however, the germanium PNP output transistor of stage 1, a 2n392, had failed in a short circuit then it would effectively be conducting at all times. Initially it would direct the shift pulses to stage 2 or stage 3 trigger transistors, but would continue to conduct which would immediately force those other stages back off. 

REMOVED THE SUSPECT TRANSISTOR - STEPPER NOW MOVING PARTIALLY

I pulled the transistor off the board. That would allow the trigger to move the ring counter to stage 2 or stage 3 depending on whether we selected Carriage Right or Carriage Left, but it would not be able to move back to stage 1. It was enough to verify that a permanently conducting (effectively shorted) transistor was causing the symptoms.

TRIED TO MOVE SAME TRANSISTOR TYPE FROM PEN UP/DOWN CIRCUIT - ALSO BAD

The flip flop circuit that drives the pen solenoid is triggered by Pen Up and Pen Down commands, which should alternate turning the solenoid on and off. I get good trigger signals when the switch is moved but their is no change in the output transistor.

Since it was the same type of transistor (2N392), I pulled it to see if it was good and might temporarily give me a working carriage stepper. Alas, it too was stuck on, both in the pen solenoid circuit and therefore for stage 1 of the carriage ring counter when I moved the transistor there. Ordered another 2N392 from eBay. 


Monday, May 18, 2026

Adjusting System Source Museum 1053 console printer (typewriter)

ADJUSTING THE MACHINE TO CORRECTLY SELECT CHARACTERS FOR PRINTING

There are two aspects to adjusting the Selectric mechanism correctly for printing characters - tension on the two metal tapes and timing. The metal tape bands pull on components inside the carrier to twist the typeball to a specific column and to tilt the ball up or down to a specific row. The ball is locked into position at a defined time as it is pivoted forward to strike the ribbon, which must be related to when the tape tension is changed and when it must hold steady. 

A print cycle is the process that begins by moving the selection levers and ends when the typeball returns back to rest position after having struck a character on the paper. The selection levers are pulled down at the early part of the print cycle, which apply differing amounts of tilt to the levers that the metal tape bands run around. Tilting the lever further from the side of the frame will add tension to to the tape band that runs over the pulley, while tilting it inward will release tension. 

Thus, the lever and pulley that the rotate tape runs over will move up to five steps outward and five steps inward to select among eleven levels of tension on the rotate metal tape. The coil spring under the typeball resists the rotate tape tension, so that relieving a bit of tension will allow the spring to turn the ball one way, while adding tension turns the ball the other direction. 

The lever and pulley that the tilt tape runs over can move up to three steps outward from the frame, selecting among four levels of tension. A spring resists the tension of the tilt metal tape, but when the tension increases the cam that the spring pulls on will turn stretching the spring. This is transmitted to a gear that tilts the typeball to its row (tilt) positions. 

It takes a bit of time in the print cycle for the selection levers to be fully set and thus the tension on the two metal tape bands is changing during that time. Once the levers have settled to their full positions, the tape tensions should be static. At this point, a detent lever is lowered into the notches on the bottom of the typeball. This forces the ball to a more exact alignment of the column of type above and holds the ball steady while it is striking the ribbon to produce a character. 

The lever must NOT detent until the two tapes have stopped moving, otherwise the change in tension of the tape no longer produces movement of the ball, instead putting stress on the metal. They can fatigue and eventually break if the tape tension changes when the ball cannot move. Similarly, if the typeball is twisted by hand when the tapes are not changing tension, it can put stress on the tape and lead to fatigue failure. 

As well, after the ball has struck the ribbon but before it returns to rest position, the selection levers begin to restore to their idle position and the two metal bands change tension back to their rest states. The detent lever MUST be removed from the typeball before the tape tension changes, otherwise we again can strain the tapes leading to failure. 

The adjustments for timing must ensure that the detent lever is in the notches of the typeball only when the tape tension is not changing. It must enter before the ball hits the ribbon and it must disengage before the selection levers begin restoring. 
 
The adjustments for selecting the correct character must ensure that when the selection levers pick among the 11 column and 4 row positions, the ball turns to the intended row and column. Detents in the typeball notch (and underneath on the tilt mechanism) will adjust for minor misalignments and hold the ball steady during that midpoint of the print cycle. 

Ideally the ball is perfectly aligned for all of the tilt and rotate targets, but real world variations exist in the parts. Thus, the detent levers make fine adjustments - the more they have to adjust, the more strain on the tapes so we want to be as close as we can to perfect. 

One addition factor complicates things. The shift mechanism selects from one of two hemispheres of the typeball. On a typewriter, these are upper and lower case characters, but on the typeball with the IBM 1130 there are only upper case letters. Instead, it is numerals and special characters that exist only one one side or the other. 

The shift mechanism has its own lever and pulley on the right frame of the typewriter. It can pull the rotate metal tape band to add enough tension to spin the typeball 180 degrees. This is in addition to the tension adjustments performed by the rotate lever on the left frame. Ideally this is exactly 180 degrees but in the real world it is not. Thus, we have to check for the alignment of the typeball for the eleven rotate columns on both sides of the typeball. 

A given column might be exactly right on the 'lower case' side but off a bit on the 'upper case' side, due to variations. We want to find the best adjustments of everything to minimize the error in positioning for all 88 characters, two hemispheres by four rows by eleven columns of shift, tile and rotate. 

These adjustments are interrelated and take quite a bit of time to dial in to a suitable accuracy. This involves hand cycling the print cycle, adjusting gear positions to time the detent lever movements, and changing lever points and rod lengths until the row and column positioning of the typeball JUST BEFORE detent engagement are as spot on as possible. 

LOOPING THROUGH ADJUSTMENTS - EACH ONE AFFECTS THE OTHERS!

The adjustment instructions give a sequence of parts to check and adjust, as if it were a linear process that results in a perfectly working machine when you finish the last step. If only that were true, I would have been done several hours ago.

Instead, each adjustment may shift the parts involved in prior adjustments, so that they are no longer set to the desired position. One needs to iterate through the adjustments, hopefully so that the deviations shrink over time and the results are 'good enough' when you hit the last step once again. 

Sunday, May 17, 2026

Replaced rotate and tilt tapes on System Source Museum 1053 console

CONSOLE PRINTER FROM SSM'S 1130 BROKE ITS TAPES

I received the console printer (1053, a Selectric mechanism driven by the computer) as the rotate and tilt tapes had broken when it was being used at their museum. I have new tapes which I am installing before adjusting the typewriter for proper typing behavior. 

INSTALLING THE ROTATE TAPE

This metal band will cause the typeball to spin, selecting which hemisphere (upper or lower case side) as well as which of the eleven columns on a side is to be printed. It is anchored to the moving carrier on the right side, runs through the frame on the right around a pulley on a lever arm, then passes underneath the carrier to the left side of the frame where it again passes over a pulley before it enters the carrier on the left side. 

We begin by inserting an eyehook on one side of the tape into the right of the carrier where a vertical screw holds it in place. The tape is threaded back and forth until it is ready to be inserted in the left side of the carrier. 

The rotate tape is wound around a drum which has spring tension keeping the metal band taut. As the pulley on the left side moves it selects one of the eleven columns, and the lever on the right chooses one hemisphere or the other. 

The typeball is rotated by hand four turns plus a bit to wind up the spring of the drum. The other end of the rotate tape has a T shaped end which is placed into a slot on the drum. The drum is then allowed to turn, releasing spring tension and pulling on the rotate tape until all slack is removed from the tape. 

Sounds easy? It isn't. You need one hand carefully maintaining tension at all times on the tape, a second hand to hold the typeball and turn it gently, and a third hand to release and reactivate the detent. The tape tries very hard to jump off the drum it is winding on, instead wrapping around the axle. 

INSTALLING THE TILT TAPE

The tilt tape also has an eyehook end which is attached to the same screw that holds the rotate tape on the right side of the carrier. It is all too easy to have the rotate tape eyehook slip off while you are trying to add the tilt tape eyehook. The tape is then routed over a pulley on the right side of the frame, back under the carrier to the left side of the frame where it goes over a pulley on a lever that can move to select one of four rows of type around the typeball from top to bottom. 

The other end of the tilt tape has an eyehook which passes into the left side of the carrier and is placed into a plastic rotary piece that is linked to the tilt gear of the typeball. That rotary piece is pulled by a spring, with the tilt tape pulled taut. As the lever on the left side moves outward, it pulls the rotary piece around against the spring tension to tilt the typeball to the chosen row of characters. 

This tape is less challenging to install, but does still need three hands or more at certain points in the process. Threading it below the carrier was the hardest part but eventually I had to routed over the tilt actuating lever and back into the carrier for attachment to the pully for the tilt gear. 

Debugging failure of carriage to move on Calcomp 565 plotter

SYMPTOMS OBSERVED

Operation of the manual carriage control to move the motor left or right had no effect. The same was true when the controller card in the 1130 sent a pulse to shift the carriage right or left. The first coil of the motor was always energized, the other two were not, and thus the motor held its position. The fast step manual switch for right or left carriage also did nothing. 

OVERVIEW OF CIRCUIT

The stepper motor that moves the carriage left or right has three coils, one of which is always energized and the other two off. By changing which of the three is energized, the motor moves one step in the direction of the new energized coil. The three coils are drive by a ring counter that moves between three states in both directions, based on a pulse to shift either to the right or two the left. 

One-shots generate a pulse and debounce the triggers to shift the ring counter left or right. The one-shot can be triggered by the manual control switches on the plotter or by a pulse on the interface from the computer to the plotter. 

The connection of the one-shots for right and left to the ring counter right and left shift inputs is routed through limit switches on the ends of the carriage. If the switch is depressed by the presence of the carrier at that extreme, any pulse to move further in that direction is blocked from the ring counter. 

CHECKING LIMIT SWITCHES

The contacts in the limit switch must be conducting in order for the pulses to get to the ring counter and shift it. I checked the conductivity of the switch using an ohmmeter. The contacts might have tarnished with age, growing a non-conducting layer. This can be fixed with contact cleaner and a burnishing tool. Fortunately, these were in good condition with very low resistance. 

CHECKING ONE SHOT OUTPUTS

The two one-shots, left and right, can be triggered by the manual control for that direction or by the interface input for that direction. The one-shot is a cross coupled set of transistors with an RC constant that holds the second transistor on for a fixed interval then returns the pair to the stable state where only the left transistor is conducting. 

I checked the voltages on the two transistors to verify first that they were set in the stable state with the left one on. I then used the manual control, watching the pulse and the right transistor to see that it turned on, cutting off the left. Finally, I watched the state revert to the left transistor on after the RC interval of about 1500 microseconds. 

The one-shots were producing perfect 1500 us pulses, however the ring counter wasn't moving. There are separate circuits for carriage left and carriage right movements, feeding a shift left and a shift right signal to the ring counter. Both sides worked, both for the manual movement switches and for computer interface commands.

CHECKING RING COUNTER OPERATION

The ring counter was initially sitting with the first stage active, energizing current through coil 1 of the stepper motor. Triggering a shift right pulse from the right one-shot, I watched to see if the transistors in the middle stage activated from the pulse. The middle coil should now be energized, with the other two stages cut off. Similarly, with the ring counter sitting with the first stage active, a left shift pulse from the left one-shot should activate the transistors in the third stage and energize that coil, cutting off the first and second stages. 

The counter never moved, with either type of shift request. On the correctly working drum movement side, the circuit feeding the second coil would snap on crisply and cut off the original coil. On the carriage ring counter, I saw a very short pulse as an attempt to turn on the transistor but nothing changed. 

The circuit uses older germanium transistors; the transistor that did not turn on is a 2N1304 type. To all appearances the transistor is bad, since the diodes and voltage levels around the circuit all seem to be good. However, I am suspicious since the counter does not shift in either direction. It we had a failed transistor for coil 2, that would fail to shift in one direction but going in the other should successfully activate coil 3. 

I will have to study the schematic and look for all the possible single points of failure that would block this from advancing in both directions. If it is one of the germanium transistors, I should be able to find them or a close substitute at worst case. 

ADDITIONAL MISSING PART IDENTIFIED

I began to string the the cables that pull the carriage left and right across the width of the drum, when I realized that I am missing the spring that provides the tension for the cables. There are two, attached the each side of the carriage and then routed through pulleys to the mechanisms inside the case. 

The cables also carry the 24V power to activate the pen solenoid on top of the carriage. Portions of the cable are in a plastic sleeve, providing insulation, with the back portions left as plain wire. The two pulleys on the rear are thus insulated from the machine chassis, used to connect the solenoid voltage to each cable. The two cables not only meet at the carriage, they also meet at the rear of the plotter where they are hooked to a spring (using insulated eyelets on the end). 

Those two eyelets are connected to the ends of a spring, which pulls the cables taut and maintains tension while the pair move the carriage. A round hub on a stepper motor is what moves one of the cables, the spring and other side the carriage moving the other cable in concert. 

Friends at a museum with an 1130 are going to measure the spring, both size and its reaction to a pull. With that information I can find a suitable replacement that will fit into the rear of the plotter and provide the intended tension. 

Saturday, May 16, 2026

Restoring a Calcomp 565 plotter for use with my IBM 1130 system

SOMEONE DONATED THIS PLOTTER TO ME - IT WAS IN SAD SHAPE

The plotter had been damaged when something in a moving truck fell down and dented the drum of the plotter fairly severely. In addition, the prior owner had disassembled it for unknown reasons and it was given to me as a pile of parts and a partially disassembled jumble. It was also missing the solenoid that holds the pens. 

FRIEND OFFERED TO STRAIGHTEN THE DRUM BUT RESULTS WERE NOT GREAT

I got the drum back with the dent hammered out but the drum was out of round, with dips and bulges since the aluminum had stretched during the dent repair. It is not good enough to draw graphs on. It sat in the shop for a long time waiting for some inspiration on how to repair it.

Some years ago, a reader of my blog offered to 3D print a drum but that trailed off to nowhere. Again, I waited for inspiration. I have not yet developed a high confidence plan for a replacement.

Part of the issue is that the left and right sides of the drum have pins that mate with pin feed paper, so that the drum will pull the paper up or down as it rotates. Even if I found a source to make or buy a hollow aluminum drum of the right dimensions, I would have to recreate the pins. 

MADE USE OF THE PLOTTER TO TEST MY CONTROLLER CARD FOR THE 1130

As part of the successful project to build a card and connectors to upgrade an 1130 to add support for an IBM 1627, which is a relabeled Calcomp 565 or 563 sold by IBM, I partially restored the plotter to verify that a plotter would be controlled by my card. 

It took several hours to carefully assemble the parts sufficient to attempt the testing. I had first tested the power supply and found it working properly. I then used the manual controls on the plotter to test out movement of the drum (up and down), the carriage (left or right) and the solenoid to lower the pen onto the paper. 

SOME PARTS OF THE PLOTTER ARE NOT WORKING CORRECTLY

3I discovered that the carriage movement circuitry is not working properly. Neither the manual controls nor pulses from a bench test setup nor from the 1130 controller card would cause the stepper motor to move. The power transistors for the stepper motor remained holding just one coil active, ignoring any attempt to change the ring counter to select an adjacent coil. This will need to be debugged. 

The chart paper motors, which keep tension on the rolls of chart paper that is moving through the drum, did not move. They are both physically frozen in place - I suspect congealed lubricants are the cause.

I have to restring the cables for the carriage movement, although I also need the stepper motor working for this to matter. With that in place and once the stepper is working, I can check for solenoid power with the pen raise and pen lower commands. I am assuming this circuitry works properly but it has not been tested.

MISSING SOME PARTS

I was missing the 5/16-32 panel nut that holds the power on/off switch onto the panel. It is hard to find that size nut, as the retailing world seems to be concentrating on 3/8" and metric nuts. There are also quite a few screws missing from the pile I received, a mix of 4-40 and 6-32 sizes. I will fill in all the missing locations when I replenish my screw stock. 

BUILDING A PEN SOLENOID REPLACEMENT

The plotter has a pen holder with a solenoid inside that is attached to the top of the carriage. It will lower a pen onto the paper or lift it off. The holder from Calcomp had several attachments for different types of pen inserts. 

I came across a Calcomp holder and solenoid that was used for a cutter instead of a pen. It sat on the same plotter mechanism but was used to cut plastic, paper or fabric. Since its shape and functionality is identical to the pen version, other than having a cutter instead of a pen insert, it should be easy for me to work out a way to put a pen in the holder. 

NEXT UP - LOOK INTO THE ISSUE WITH THE CARRIAGE STEPPER MOTOR

When I have time in the workshop, in between higher priority projects or tasks, I will dive into the logic and figure out why the carriage is not moving with manual or interface commands. At the same time I will do a quick check to see if the flipflop for pen lower/raise is working and if the circuit is driving voltage when the solenoid should be activating. 

Testing with a Calcomp 535 - part 2

MEASURING -34 VOLTS IS OKAY WHEN THE SUPPLY IS UNCONNECTED

Two factors contribute to a higher unloaded voltage observed on the -24V rail. First, the nominal AC mains voltage was bumped up from 115V to 120V at some point after the plotter was designed. Second, voltage drop takes place in the transformer secondary windings when it is under load that reduces the output voltage compared to the very high impedance of an unloaded measurement. 

MOVING FORWARD TO TESTING

I tested the logic boards to be sure that there were no short circuits that might damage the power supply rails. After this point, I felt comfortable that the worst I would be facing is incorrect behavior, not dramatic failure. I hooked up the logic board to the power supply, controls and stepper motors, again checking for unexpected short circuits. 

There are two ring counters in the plotter - one for the pen carriage moving left or right, the other for the drum to roll up or down. These drive current through one of three pairs of coils in a stepper motor, with the active coil pair moving each time we shift the ring counter. 

The final circuit is a flipflop for pen up versus pen down on the paper. A falling edge on one side sets the flipflop to 'pen down', a falling edge on the other changes the flipflop to 'pen up'. This either energizes the solenoid in the pen or turns it off to allow the pen to move back under spring tension. 

My first tests used the manual controls on the plotter. This verifies that the motors move one step in each direction and that the ring counters are functional. It is a fairly good test of the plotter circuitry. The circuit for the drum movements worked perfectly, single stepping and then moving 120 steps per second with the fast mode manual control. The carriage left or right controls did nothing - no single step, no fast movement. 

There is something wrong with the plotter concerning the carriage movements. I don't have the plotter assembled enough to power the solenoid since its power travels through the cables which pull the carriage left or right and those are not connected yet. Thus all I can test with the plotter in its current condition is whether the controller card can move the drum up or down one step in response to an XIO Write. 

TESTING THE INPUTS FROM THE 1130

Then I used my bench testing setup to try to make the steppers work with triggers from my breadboard device. The circuitry looks for a falling edge on the control inputs to advance a ring counter in one direction or another - the outputs of the ring counter are fed to the poles of the stepper motor, so that one step of the ring counter causes one increment of rotation on the motor.  

The bench setup uses pullup resistors to 12V and a pushbutton to drop each of two lines to ground when I activate the button. My scope could show me the state of the ring counter which would let me verify that it moves one step in each direction on command.  Alternately a voltmeter on the collector of the driver transistor for each of the three coils will show two at -24V and one at ground, shifting which is grounded as the ring counter advances. 

Indeed, the button press resulted in a one step movement in the direction I requested, exactly the same as the manual control on the plotter. Since this mirrors how my controller card drives the plotter, I fully expected the final testing on the 1130 to succeed too. It was time to connect to the 1130 and try it out. 

TESTING WITH THE IBM 1130 SYSTEM

I hand toggled some commands into the 1130 system so that I could execute XIO Write and XIO Sense Device commands. The goal was to mirror the tests from the bench. 

I coded an XIO Write with the data word set to request an up movement, followed by an XIO Sense Device and then a wait instruction. I should see the status with bits 14 and 15 set in the accumulator register (ACC). The 1130 should have taken a step into the interrupt handler for level 3, which I set up with a wait instruction. The stepper motor should have moved one step. 

I then have an XIO Sense Device followed by another wait instruction. This is in the interrupt handler code. I should see bits 0 and 15 in the accumulator, since the movement is complete. The next instruction is an XIO Sense Device with Reset bit 15 followed by a branch out of the interrupt handler. I should return to a wait instruction following the original XIO Write and Sense Device code. 

I can update the data word and do the above a second time, so that it is now requesting to turn the drum down. This too worked properly. I set up a loop so that my program issued drum movement commands as fast as the prior one completed and we returned from the interrupt handler. The drum moved rapidly, even faster than the manual fast mode control. 

Ultimately, I powered off the Calcomp to test its behavior in that mode. When I issue the XIO Sense Device I should see that no bits are on. Doing an XIO Write to request an up movement should turn on the interrupt request but an XIO Sense Device will show only bit 0 turned on indicating that the movement completed but the plotter is not ready. 

That is exactly how it behaved. Everything I could test was working exactly as it should. 


Project to support a 1627 plotter on an IBM 1130 is a success!

FULLY SATISFIED WITH THE FUNCTIONALITY

All the testing proved out the card and connectors do exactly what the original IBM parts would do. This is a full substitute for the 5806223 card and various connectors that are installed in an IBM 1130 when IBM configured the machine to support the 1627 plotter. 

GITHUB UPDATED, PROJECT CONSIDERED COMPLETE

I made sure that the Github files for this project are up to date, with a correct bill of materials, FPGA code, PCB design files and other documents. I also shared the board on PCBWay.com so that others could order it directly from them. 

The goal of this project is to allow other IBM 1130 owners to be able to build and use this card in order to connect an IBM 1627 or Calcomp 565/563 plotter and have it draw graphs from programs, just as they would function in a machine with the original IBM 5806223 controller card installed and the 1130 configured by IBM to attach a 1627. 

Thursday, May 14, 2026

Testing with a Calcomp 535 (equivalent of IBM 1627 model 1) - part 1

I WANTED TO USE A PLOTTER FOR A FINAL CHECK OF THE PROJECT

I am restoring a Calcomp 565 plotter and it is currently disassembled because the physical plotter drum is dented and unusable. However, I can connect to it and power up the circuitry to see how it responds. The stepper motors should move if it is responding to the -up or -left commands. I should see voltage to the solenoid that will raise or lower the pen - turned on when the pen is lowered and turned off when a -raise command has executed. I can also verify that it delivers the -24V to the 1130 when the power switch is turned on. 

CABLING WORK

I was not satisfied with the quality of the SLT connector mainly due to issues with the crimp pins particularly with a few wires that were larger (but had unique colors like orange and purple). In the end, I rebuilt the connector and fidgeted with the pins as some of them were not locking into place in the connector as they should have. 

I also discovered all the ways to assemble the Cannon 19 pin connector incorrectly - one at a time - but eventually got the threads, cover, access plate, strain plate and other parts over in the proper sequence over the wiring. In other words, the cable work took surprisingly long.

I finished wiring my cable to the 19 pin connector that plugs into the plotter. Four wires from the connector run to an SMS paddle card that will plug into the IBM 1130's power block, delivering 115VAC and connecting to the signal ground of the computer. The other wires run to the SLT connector plugged into slot N5 of compartment C1 of gate A of the system. I also included the 3.9K resistor that IBM installs on the signal SMS paddle card, since I skipped the signal paddle cards for this installation. The resistor is inline in the Cannon connector now, thus making the equivalent connection from the plotter to my controller card as would occur with the IBM paddle card scheme. 

My cabling between plotter and the 1130
Controller card and connector in place

MAKING SURE THE PLOTTER WILL POWER UP AND WORK (ELECTRICALLY)

Since I haven't powered this up since I received it years ago, I needed to approach it as a restoration to get all the electrical/electronic aspects working. Then the stepper motors have to be able to move when the circuitry commands it.

First up was the power supply, which I had to get working properly before hooking it to the logic and other circuitry. This supply produces -24V, -9V, -7.5V, +1.5V and +3V all from a single bridge rectifier, using diodes in a voltage divider plus one Zener diode to produce all the individual levels, with ground sitting 3V out from one end of the 27V span out of the rectifier. Not too much to go wrong, but had to be checked. 

The -24V output was sitting at -34V, but that may be because there is no load with the power supply disconnected from the logic board and other components. There is also the reality that line voltage in the US is noticeably higher than the nominal 115V that the equipment was designed to use. 

At this point, I noticed that the diagrams that I had printed, from the IBM 1627 version of the plotter manual, had components whose numbering was changed compared to the Calcomp manual; most importantly, the component numbers on the actual plotter matched the Calcomp manual. IBM chose to drop some diagrams from their version of the manual, but I needed those diagrams to do the detailed testing I had planned.

I will print all the diagrams from the Calcomp manual when I get home tonight, so that I can finish up my testing of the plotter power supply and move on to the other components. 

Monday, May 11, 2026

Testing the plotter controller card in the IBM 1130, without a plotter hooked up - part 2

ANSWER TO THE BIT 15 MISBEHAVIOR

With the card out of the machine, I checked the pins on the backplane at slot M4 to check for shorts or unusual connections of the pin B05 that drops to 0V during an XIO Sense Device if pin B08 does not have -24V connected through a 3.9K resistor. 

I checked the card as well, testing the connections between the FPGA board, the inverter gate and the output pin. I also looked for shorts to adjacent pins. I then plugged the card into the 1130 at M4 and M5, then tested whether B05 is now shorted to B04 or B06, the likely issue if a mechanical short exists inside my connector. 

The first issue I observed with the card was that the contact seemed a bit mis-shaped. I swapped a better contact and resumed testing. I discovered that with the -24V applied, bit 15 would turn on, the opposite of what should occur. That was a simple fix to apply to my Verilog code. 

CONTINUING TESTING IN THE 1130

I had to wire up a -24V source to the 3.9K resistor on the cable in order for the controller to see the plotter as ready for commands. If that voltage isn't present, the machine sets bit 15 of the Device Status Word (DSW) to 1 and simply presents an immediate interrupt with operation completion without attempting any control of the plotter. 

I switched on the Interrupt Delay switch under the top cover of the 1130. This blocks the machine from jumping into an interrupt handler even though interrupt requests may be present. This made the testing more straightforward. 

A short program that I hand toggled into memory fired off XIO Write commands to trigger the different movements - Drum Up, Drum Down, Carriage Left, Carriage Right, Pen Raised and Pen Lowered. It could be stepped in single instruction mode to watch the interrupt level 3 request (IL3), then to look at the outputs of XIO Sense Device. 

I hooked up the scope to the output pins on the backplane of the 1130 where the plotter outputs exit the card. What I was looking for was a 12V output steady state while idle and then a 1.9ms or 50ms dip to ground when the pen movement or pen lift/lower commands were issued. The machine should also trigger an interrupt on level 3 and respond appropriately to XIO Sense Device commands. 

I also watched the interrupt level 3 request pin to verify that timing from the issuance of the XIO Write and the assertion of the interrupt request. This too passed correctly. Redoing this with -24V off showed virtually zero delay between the XIO Write and the interrupt request. 

I verified that the interrupt was requested on level 3 after a command was issued. The DSW status bits were correct after the command - Bit 0 on indicating plotter response and bit 15 off showing that -24V is present from the plotter. Turning off -24V and repeating, I saw Bit 0 and Bit 15 both set. These were the expected results. 

Running a program that issues the XIO Write and immediately performed an XIO Sense Device and stops at a Halt instruction allowed me to see if the busy bit 14 would be turned on in the DSW while the controller was active, without having to code an interrupt handler routine to run under level 3. The busy bit was set. 

The hardest test to perform was to verify if bit 14 of the device status would be turned on while the card was actively requesting a movement command and for the succeeding duration where the plotter is expected to be busy completing the task. The easier to detect was the pen raise or pen lower commands, as these should be busy for 100 milliseconds. This too was correct. 

Everything worked perfectly now. I checked the timing of when the interrupt is requested compared to the length of the plotter drive signal and that was spot on as well. I checked all six movement commands just to be certain. The card now operates exactly as the IBM built 5806223 card does, with the same signal timing, levels and behaviors. 

Purple trace is pen movement (1.9ms), yellow is Int L3 Req

USING USB SERIAL LINK TO CAPTURE MOVEMENT COMMANDS FROM CARD

The CMOD S7 daughtercard has a USB connector that can be used for both loading the FPGA configuration information onto the board and for serial communications with an external device such as a PC. It runs at 38,400 baud and emits a short line with six ASCII characters, either 0 or 1, based on the first six bits of the data word written by the XIO Write instruction. Each line is followed by a newline and a carrier return character. 

In order to protect the power supply on my controller card when the USB cable is being used for this purpose, we have to disable having the USB power drive the card; only the 12V from the 1130 into my card will power up the CMOD S7 board. There is a diode (D17) on the CMOD S7 board that connects the +5V from the USB port to the remainder of the board's power circuitry. Opening this connection ensures that the USB cable won't feed any power into the CMOD board or the rest of my controller card.

Diode D17 is circled in red

 From the point that you remove the diode, the way you can flash new code into the FPGA configuration memory device is to apply 12V to pin G02 of the card, ground to D08 and J08, then plug in the USB cable and use Vivado as usual. The card must be out of the IBM 1130, of course. 

INSTALLING A CABLE FROM SLOT N5 TO THE PLOTTER CONNECTOR

I built a cable with SLT connector to fit into slot N5 of the same compartment. That brings out the six signals that drive the plotter - pen left, pen right, drum up, drum down, raise pen and lower pen. This cable also carries the signal ground and brings the -24 supply from the plotter, through a 3.9K resistor, to be sensed by the controller card to determine that the plotter is attached and powered on. 

In order to exhaustively prove out the card, I had to verify that what it emits over the cable to the 1627 Plotter is sufficient to cause it to move the drum up/down, move the pen left/right, and raise or drop the pen onto the surface. The cable needed to be completed that took the signals from Gate A, Compartment C1, Slot N5 and out to the plotter. 

The IBM approach connected a bundle of wires from the SLT connector in Slot N5 and routed them to the Standard Modular System (SMS) connector PF6 inside the 1130. An SMS paddle card inserted into PF6 is wired to the cable that ends in a 19 pin connector (Cannon SK19-23C) which plugs into the plotter. A few wires from the 19 pin connector are hooked to an SMS power paddle card that plugs into SMS connector PP6 inside the 1130, primarily to provide 115VAC to the plotter. 

An alternate approach wires an SLT connector from slot N5 out to the 19 pin connector, with only the SMS power paddle card plugged into the original PP6 slot of the 1130. I chose this first as a faster implementation in order to complete some plotter testing. 

Sunday, May 10, 2026

Testing the plotter controller card in the IBM 1130, without a plotter hooked up - part 1

TESTING IN THE 1130

Since it did everything properly on the bench setup, it was time to verify that it works correctly with the IBM 1130 while inserted into the logic compartment. The newly constructed card was inserted again into slots M4 and M5 in compartment A-C1 of the 1130 system, which is set up for the IBM card that controls the plotter. 

I did basic verification that the slots were indeed wired up to N5 where the connection to the plotter exits the backplane. I then set up some simple tests to see how it behaved without the -24 volts from the plotter applied to pin B08.

It should produce a Device Status Word (DSW) with bit 15 set to 1, indicating that the plotter is either not attached or not powered on. I issued an XIO instruction to an IOCC specifying a Sense Device operation on area code 5 (the 1627). The resulting DSW was all zeroes. This was not what I expected.

I then changed the IOCC to specify a write operation on area code 5 pointing at a word where I had both bits 0 and 5 set to 1. When I executed the XIO, I saw the light for interrupt level 3 come on, which is exactly what I would expect. Having turned on the Interrupt Delay switch under the top cover of the 1130, it didn't jump into the interrupt handler code, so I could more easily debug the card. 

I reset the IOCC to a Sense Device operation and executed it. I saw a DSW with bit 0 turned on (operation complete) which is consistent with the interrupt request. However, I put the oscilloscope on the output pin and never saw it dip down from 12V to 0, as it should have for 50 milliseconds. 

That is consistent with the board behavior if the plotter is not turned on - immediate completion but no command signal sent to the plotter. Everything was correct with the behavior except for the lack of DSW bit 15. 

I then tried to load some memory locations but wasn't able to set bit 15 to a 1 value. Locations that previously had that value would display the 1 in bit 15, but I couldn't load any new values using that bit. The console entry switch (CES) that I used to load memory values shows every switch that is in the 1 position in a register EXCEPT the switch for bit 15 didn't turn on the register bit.

Before I proceed to more elaborate testing, I need to investigate this relatively small issue - bit 15 not appearing in the DSW nor available to load into memory. This could be a short inside my connector on the card, for example, or some other issue in the 1130 that only manifests when the card is plugged in. 

Saturday, May 9, 2026

More bench testing of 1627 controller card

COMPLEX BENCH TESTING SETUP SEEMS TO BE WORKING

The SLT breakout box provides each signal on a banana plug jack. Where it gets cumbersome is when I have to connect to a wire going into a breadboard or some other device. I have some banana cables with alligator clips but mostly they are male to male types. As you can see below, it gets messy interfacing many input and output signals from an SLT card.




I ordered quite a few banana plugs that I can solder to wire segments suitable to inserting in a breadboard or an Arduino type device. That will make this process much easier the next time around. I made up enough to rewire the testbench and clean things up. 

I put the new Arduino Uno into the testing setup and now see the XIO Write signal asserted properly. This gives my card the three signals it needs to accept a write request from the 1130 - XIO Write, Area 5 and T6. When those occur, the state machine proceeds through to generate the request for an interrupt at the completion of the commanded plotter movement. 

CONTINUING TESTING, USING SCOPE TO OBSERVE OUTPUTS

I used a four channel scope to capture sets of output signals from the card. The signals produced to drive the plotter are inverted logic 12V levels, the signals to the 1130 are inverted 3V levels, and some of them required pull-up resistors since the 1130 normally provides the pull-up. 

Activating the DC Reset line sets the board in its idle configuration - all six plotter outputs would be de-asserted to 12V levels, the four outputs to the 1130 would be de-asserted at 3V levels, and internally it should have the busy state turned off. I checked this first. Works perfectly. 

Sense while idle but no -24 power

Without plotter power connected, the DSW should show that the plotter is not ready. This occurred - bit 15 of the DSW is 1. 

Sense while idle with -24 power

The sense should show the plotter ready but not busy and no operation complete. Interrupt level 3 will remain high. The DSW has all bits off, which is correct, and no operation complete or interrupt request.

Trigger write requesting to move the pen up

The signal to the plotter should drop low for an appropriate time. After an additional interval the interrupt level 3 signal will drop low. For the model 1, the time for a plotter signal to cause this operation is 1.9 milliseconds, followed by a second 1.9 ms interval, all of which has the plotter indicating busy by putting a 1 in bit 14 of the DSW if a Sense Device is executed during this time. At the end of the 3.8 ms, the interrupt request for level 3 becomes 0 (inverted logic levels) and a DSW will have bit 0 turned on from this point onward. 

A 1627 model 2 will use 2.9 milliseconds for the duration of the command to the plotter and an additional 2.9 ms of busy time before triggering the interrupt request. I checked by temporarily placing a jumper on the card and verified the two durations  were correct for both model 1 and model 2. 

Sense then sense with reset issued

The sense should show operation complete (DSW bit 0) but not busy (DSW bit 14 off) and ready for further operations (DSW bit 15 off). It should only turn off the operation complete status (DSW bit 0) and interrupt level 3 will go high when the Sense with reset bit 15 is issued, not with a regular Sense Device. This worked exactly as intended. 

Trigger write requesting raising pen off paper

The raise command should do the same things as the prior write but the timing will be longer as is appropriate for raising and lowering the pen. The command to the plotter is held for 50 milliseconds, then a second interval of 50 milliseconds follows that; during the entire 100 ms, the plotter is shown as busy (by a 1 in DSW bit 14).  This is the same for either model of the plotter. I verified that this works correctly. 

Trigger write with both left pen movement and raising it off the paper

Requesting both types of movements should drop the 'left' command after 1.9 or 2.9 ms but maintain 'raise' for a full 50ms. The plotter is busy through the entire 100 ms interval. The interrupt level and operation complete only occur after the raise is complete. This was verified on the bench. 

Trigger above dual write test while -24 power is off

If -24V is off, no movement is commanded of the plotter but the interrupt request is immediately issued and the operation complete (DSW bit 0 set) is shown too. Initially I blipped the command signals to the plotter for 80 nanoseconds before my logic determined it should give an immediate operation completion. 

I decided to avoid this, thus recoding a bit of the FPGA state machine. It now proceeds immediately to completion status without toggling any of the signal lines to the plotter. 

RESULTS OF THE TESTING

The bench testing setup was fragile, but with some work it became reliable enough to perform all the tests I wanted. I had simulated all of this in Vivado previously but it is good to see the actual behavior match what I designed and expected. 

The board was inserted into the IBM 1130 in order to be put through its paces being driven by software commands and interacting with the 1130's interrupt and sense device mechanisms. I began building a connector to fit into slot N5 of gate A, compartment C1 of the 1130, with wiring that will deliver the six command signals to the plotter (pen left, pen right, drum up, drum down, raise pen and lower pen) as well has carry the -24V from the plotter that indicates to the controller that the plotter is ready to receive commands. 

I found the correct parts on Mouser to build SLT sockets to connect wiring to the backplane of the 1130. I started wiring the connector and cable before I ran out of steam today.

Thursday, May 7, 2026

Troubleshooting bench testing setup for the 1627 controller card

COMPLEX BENCH TESTING SETUP NOT WORKING PROPERLY

The setup makes use of a breadboard development system, an Arduino Uno, several power supplies, an oscilloscope and my SLT breakout box. The breadboard development system includes both 5V and adjustable power rails, plenty of breadboard space, two debounced pushbuttons, display LEDs and various types of switches. External 9V, 12V and -24V supplies round out the setup; the 9V supply powers the Arduino. 

The breadboard has open collector buffers to convert the 5V signals of the Arduino to 3V consistent with SLT logic. I didn't have any hex buffers in DIP format, so I had to wire up pairs of hex inverter chips to produce the same outcome, using pull-ups to 3V on the chips. I also used a pair of debounced pushbuttons to trigger behaviors in the Arduino. 

NOT SEEING REACTION TO WRITING TO THE PLOTTER

I watched the scope expecting to see the command lines to the plotter dip down as well as the interrupt request line go active, but there was no activity. I started debugging to see that I was properly sending the signals needed by my card - XIO Write, Area 5, T6, plus one of the B register bits. I saw T6 triggering but not Area 5 nor XIO Write. 

It was a rooky mistake. I had started serial communications just to get a bit of debugging information, but that uses pins 0 and 1 for the serial link. I had assigned those to the two missing signals. Removing the serial activity frees up pin 1, but pin 0 isn't useful on the Arduino Uno. With the removal of serial activity, I did see Area 5 going active. 

I moved the XIO Write wire to pin 12 and changed my Arduino code, but it did not activate. I even checked the wire for continuity and put that wire directly to a scope lead without any connection to the breadboard - still no sign of life. 

The Arduino I used was an old one I pulled out of a parts bin - one that had been used for prior projects. Just in case there is something wrong with it, I ordered a new Uno which I can swap in. Until I can pulse the XIO Write line, the board will not do anything meaningful. 

Wednesday, May 6, 2026

Modified plotter controller card

CORRECTED FOR BAD FOOTPRINT FOR THE FPGA DAUGHTER CARD

As previously discussed, the position of pins segments J3 and J4 were swapped on the footprint, leading to several problems. Most serious was swapping +5V and ground power inputs, but we also had signals routed to different pins than were expected in the FPGA code. 

BODGE WIRING

I swapped the power lines and also connected jumper wires from pins where the FPGA had analog inputs to other pins that were suitable for digital output. 


CONVERTED FPGA CODE

I adjusted to code to use the pins to which the traces are currently connected rather than the ones I intended, which allows me to use the board now. 

Testing the new controller card for the 1627 plotter on the bench

REPAIRED DETACHED CONNECTOR FOR PIN G02

The connector that was pushed back off the PCB needed to be reattached. I removed the plastic covers, then soldered that connector back in place by hand. I used a clamp to hold the connector down at the front and applied the soldering pencil tip further back to melt the solder underneath and make it flow.

I noticed that the metal pad had been peeled back, validating the theory that the connector had been mechanically sheered backwards as it was inserted into a socket. I didn't like the shape of the connector, so I switched to another that was in better shape. The card fits into sockets and the connector seems to be holding in position. 

BENCH TESTING

I have a test jig where I can plug in SLT cards (including my substitute card for this project) and get access to the signals on the various pins. By supplying this with +12V power and appropriate signal states, I should be able to test out the behavior of the card on the bench. The outputs are connected to oscilloscope probes in order to view the action of the board. 

FIRST CHECKS DONE

I brought up power to verify the voltage regulator and lack of excess drain. I immediately discovered that I had to +5 and ground connections to the FPGA board reversed. I removed the pins and installed jumper wires to power the CMOD S7. 

The command lines to the plotter are inverted logic and had the expected 12V level when they are not asserted. The detection circuit that tells my logic whether the plotter's -24V is active (when the plotter is cabled up and switched on) did give a logic high 3.3V when the -24 power supply was switched on and a logic low when it is off. 

DRIVING THE BENCH TESTING

I grabbed an Arduino and programmed it using direct port access because that gave me more precise timing for the output control signals from the Arduino that drive my plotter card - 500 nanoseconds per port manipulation which is close enough to an 1130's T clock steps that I could mimic the timing well enough to test out my card. The Arduino will drive the inputs to my card. 

// port D bits 0 to 7 below
#define XIOW 0
#define A5 1
#define T6 2
#define XIOS 3
#define XIOS15 4
#define DCRESET 5
#define B0 6
#define B1 7
// port B bits 0 to 3 below
#define B2 8
#define B3 9
#define B4 10
#define B5 11
// reuse analog inputs as digital inputs for control
#define resetit 14
#define doup 15
#define doraise 16
#define sense 17
#define sensereset 18
#define doboth 19

void setup() {
  pinMode (XIOW, OUTPUT);
  pinMode (A5, OUTPUT);
  pinMode (T6, OUTPUT);
  pinMode (XIOS, OUTPUT);
  pinMode (XIOS15, OUTPUT);
  pinMode (DCRESET, OUTPUT);
  pinMode (B0, OUTPUT);
  pinMode (B1, OUTPUT);
  pinMode (B2, OUTPUT);
  pinMode (B3, OUTPUT);
  pinMode (B4, OUTPUT);
  pinMode (B5, OUTPUT);
  pinMode (resetit, INPUT);
  pinMode (doup, INPUT);
  pinMode (doraise, INPUT);
  pinMode (sense, INPUT);
  pinMode (sensereset, INPUT);
  pinMode (doboth, INPUT);
  // DCRESET is inverted, true when low
  digitalWrite(DCRESET, LOW);
  // below control inputs are standard, true when high
  digitalWrite(XIOW, LOW);
  digitalWrite(A5, LOW);
  digitalWrite(T6, LOW);
  digitalWrite(XIOS, LOW);
  digitalWrite(XIOS15, LOW);
  // below control inputs are inverted, true when low
  digitalWrite(B0, HIGH);
  digitalWrite(B1, HIGH);
  digitalWrite(B2, HIGH);
  digitalWrite(B3, HIGH);
  digitalWrite(B4, HIGH);
  digitalWrite(B5, HIGH);
  delay(500);
  // release the reset from the board
  digitalWrite(DCRESET, HIGH);
}

void loop() {
  // process any button pushes
  if (digitalRead(resetit) == HIGH) {
    // hold reset for half a second then release
    digitalWrite(DCRESET, LOW);
    delay(500);
    digitalWrite(DCRESET, HIGH);
  } else if (digitalRead(sense) == HIGH) {
    // simulate the 1130 executing an XIO Sense Device for plotter
    // one memory cycle (8 T clock steps)
    PORTD |= (1 << 3); // XIOS
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD &= ~(1 << 3); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
  } else if (digitalRead(sensereset) == HIGH) {
    // simulate an XIO Sense Device with reset bit 15 turned on
    // one memory cycle (8 T clock steps)
    PORTD |= (1 << 3); // XIOS
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 4); // XIOS15
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD &= ~(1 << 3); // ~XIOS
    PORTD &= ~(1 << 4); // ~XIOS15
    PORTD &= ~(1 << 1); // ~A5
  } else if (digitalRead(doup) == HIGH) {
    // simulate an XIO Write with B Bit 2 set (move pen up)
    // one memory cycle but only activates at T6 clock step
    PORTD |= (1 << 0); // XIOW
    PORTD |= (1 << 1); // A5
    PORTB &= ~(1 << 0); // ~B2
    PORTB &= ~(1 << 0); // ~B2
    PORTB &= ~(1 << 0); // ~B2
    PORTB &= ~(1 << 0); // ~B2
    PORTD |= (1 << 2); // T6
    PORTD &= ~(1 << 2); // ~T6
    PORTD &= ~(1 << 0); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
    PORTB |= (1 << 0); // B2
    // wait 1 millisecond then execute XIO Sense Device
    delay(1);
    PORTD |= (1 << 3); // XIOS
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD &= ~(1 << 3); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
  } else if (digitalRead(doraise) == HIGH) {
    // simulate an XIO Write with B Bit 5 set (raise pen off paper)
    // one memory cycle but only activates at T6 clock step
    PORTD |= (1 << 0); // XIOW
    PORTD |= (1 << 1); // A5
    PORTB &= ~(1 << 3); // ~B5
    PORTB &= ~(1 << 3); // ~B5
    PORTB &= ~(1 << 3); // ~B5
    PORTB &= ~(1 << 3); // ~B5
    PORTD |= (1 << 2); // T6
    PORTD &= ~(1 << 2); // ~T6
    PORTD &= ~(1 << 0); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
    PORTB |= (1 << 3); // B5
    // wait 1 millisecond then execute XIO Sense Device
    delay(1);
    PORTD |= (1 << 3); // XIOS
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD &= ~(1 << 3); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
  } else if (digitalRead(doboth) == HIGH) {    
    // simulate an XIO Write with two B bits set
    // B Bit 5 (raise pen off paper) and B Bit 4 (move pen left)
    // one memory cycle but only activates at T6 clock step
    PORTD |= (1 << 0); // XIOW
    PORTD |= (1 << 1); // A5
    PORTB &= ~(1 << 3); // ~B5
    PORTB &= ~(1 << 2); // ~B4
    PORTB &= ~(1 << 3); // ~B5
    PORTB &= ~(1 << 2); // ~B4
    PORTD |= (1 << 2); // T6
    PORTD &= ~(1 << 2); // ~T6
    PORTD &= ~(1 << 0); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
    PORTB |= (1 << 3); // B5
    PORTB |= (1 << 2); // B4
    // wait 1 millisecond then execute XIO Sense Device
    delay(1);
    PORTD |= (1 << 3); // XIOS
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD |= (1 << 1); // A5
    PORTD &= ~(1 << 3); // ~XIOS
    PORTD &= ~(1 << 1); // ~A5
  } // do nothing if none of the buttons were pushed
}

For example, asking the plotter to move the pen is done by issuing an XIO Write instruction to the plotter device (area code 5) and setting on bits 0 to 5 of the data word to request pen left, right, up, down, raise and lower commands. In the 1130, one 3.6 microsecond memory cycle is when the controller card sees the XIO Write by means of signals +XIOW and +A5 that are high for the entire memory cycle. During one T clock step of that cycle, signal +T6 is high. The data word is sitting in the machines B register thus my card sees signals -B Bit0 thru -B Bit 5

To see the status of the plotter, a programmer issues an XIO Sense Device to the plotter and receives back a data word where bits are assigned specific status conditions by the controller card. The card sees +XIOS and +A5 for a memory cycle, at which time it turns on B bits 0, 14 or 15 based on the conditions of the plotter as determined by my controller card. My card has to pull down lines -DSW0-DSW14 and/or -DSW15 based on the conditions it is reporting. The XIO Sense Device can take place while the plotter is still moving the pen, before any movement has been requested, or after the movement is complete. 

If a particular bit in the command word for the XIO Sense Device is set (bit 15) then the controller card will turn off its request for the 1130 to be interrupted (on interrupt level 3). When a movement is completed, the controller card turns on the interrupt request and maintains that until an XIO Sense Device with reset bit 15 is executed. 

My board has six inputs that I wire to pushbuttons or slide switches on my breadboard bench testing device:

  • Put the controller card in reset, as if the 1130 has powered up or has RESET pushed
  • Issue an XIO Write to move the pen up
  • Issue an XIO Write to raise the pen
  • Issue an XIO Sense Device
  • Issue an XIO Sense Device with reset bit 15
  • Issue an XIO Write to move the pen up and raise it

I installed two open collector hex buffer chips on the breadboard so that the +5V outputs of the Arduino become compatible with my cards logic levels (0 and 3) with a pullup resistor to +3V. These run to the pins of the controller card. 

Four of the outputs of my card need a +3V pullup resistor, which I put on the breadboard. The other outputs of my card operate with logic levels of 0 and 12V. One special input of my card takes -24V which would be delivered by the 1627 plotter when it is powered on, through a 3.9K resistor which I put on the breadboard. 

I set up the scope to monitor some of the outputs and inputs, so that I could verify that the controller card works according to spec. Once it is all verified, I can plug it into the 1130 and test with my physical Calcomp 565 plotter which is the same as the IBM 1627. 

If the 1627 plotter is not hooked up (or powered down), then an XIO Sense Device should not pull down -DSW15. Any XIO Write request should immediately turn on the interrupt request and pull down -DSW0 for any XIO Sense Device. There should be essentially zero delay. I then hooked up the -24V to the board and moved on.

The function pushbutton doup will issue an XIO Write requesting an up pen movement. The -Up signal drops from its regular state +12V for 1.9 milliseconds. Within a millisecond, the card sees an XIO Sense Device and will drop signals -DSW14 and -DSW15 to zero for one memory cycle. 

After 3.8 milliseconds, the -Interrupt Level 3 request will drop to zero and stay there. Pushing the sense button should cause signals -DSW0 and -DSW15 to drop to 0 for one memory cycle. 

Pushing the sensereset button will return the same but turn off -Interrupt Level 3 and subsequent sense receive only -DSW15

Pushing the doraise button is similar to what occurs with doup, however the signal -raise is held low for 50 ms and only after 100 ms will -Interrupt Level 3 drop to zero. 

The button doboth will simultaneously request moving the pen left and raising the pen. The -left signal should go low for only 1.9 ms but the -raise signal should stay down for a full 50 milliseconds. Only at the end of 100 ms should the -Interrupt Level 3 drop low. 

Pushing the resetit button will reset the card to its default state. That would turn off the -Interrupt Level 3 line and any commands to the 1627. 

DISCOVERED A MAJOR FLAW IN THE PCB DUE TO A DEFECTIVE FOOTPRINT

Once I attempted some tests I discovered the reason that my +5V and ground connections were backwards. The footprint I used with KiCad has reversed the position of some of the banks of pins. 

As you can see above, banks J3 and J4 do correctly position the +5V pin (24) and the ground pin (25) they way I had to rewire them. My footprint had J4 at the bottom right and J3 at the top right, thus reversing where the +5 and ground pins sat. It also meant that my PCB wired signals to J4 when I intended them to be wired to J3 based on the digital I/O pin numbers 16-23. 

QUICK AND DIRTY REWIRING AND REGENERATION OF FPGA LOGIC

In order to proceed with testing, I altered the configuration file for the CMOD S7 to put my signals on pins 25-31 so that they were picking up what was routed to the top right connector, since the footprint swapped the pin numbers for the right side. Because pins 32 and 33 are analog inputs, I removed the pins from the CMOD board and then added jumper wires to carry the signals down to what the footprint thinks are pins 16 and 17. 

I only had to reroute signals on the PCB from 32/33 to 16/17, as well has swapping +5V and ground, in order to have accessibility to all the signals. I then changed the configuration file for the FPGA to make use of the actual pins where the signals were connected, which made everything right for now. 

I will have to redo the PCB with a repaired footprint in order to have future builds work properly, as well as regressing the configuration file changes, but I can make use of this board with bodge wires without needing to fab and put parts on a new version of the PCB. 

CORRECTED INVERSION OF 1130 OUTPUTS

My testing showed that the outputs to the 1130 -IntLvl3, -DSW0, -DSW14 and -DSW15 were being emitted by my FPGA code as inverted logic but the open collector inverter chip on the PCB was flipping it back to high when asserted. I changed the FPGA code to emit high when asserted, thus the PCB will produce the inverted values needed.