Sunday, July 23, 2017

Failed part discovered in C-3 Condenser Checker, improvements made


The main power is set by a voltage divider, with ground at the center node. There is a 47K resistor up to the side which feeds B+ to the 1629 magic eye tube. On the other side, there is a series chain of resistors which total 98K. This gives roughly 1/3 of the voltage to the B+ and 2/3 to the resistor chain that are on the selector switch which determines what negative voltage is presented across the capacitor under test.

The first 22K resistor in the series chain was wide open, which meant that the minus side of the divider was disconnected. This explains the values I measured and is consistent with the design flaw where the divider string uses mainly 22K resistors to drop about 100V per step. This is because the chain of resistors has about 4.5ma running through it.

That puts 1/2W on the resistor, its rated value, but if a capacitor is tested with substantial leakage current then the power on the resistor will temporarily be well above its rated power. Over time, the abused resistors change value or open up like mine did. The replacement components I bought are rated at 2W which gives a lot more margin.

The prior owner of this tester had substituted a different magic eye tube for the 1629 I used. It was a 6V type while the original has 12V filaments. He or she put in some large low value resistors to divide the filament voltage in half. I bought the proper magic eye tube therefore I removed this hack.

The circuit should be back to original design when I finish the restoration, other than any changes I need to introduce to deal with excess HV from the transformer. It should produce no more than 500VAC which when rectified and filtered puts about 450V on the low side filter capacitor, within its margin. Thus, I don't strictly need to introduce by pair of series capacitors to provide a higher voltage handling capability.

Instead, I added resistors in series from the cathode of the rectifier so that they drop the excess voltage. I measured the transformer output at 600V, about 1.2x the intended voltage. The appropriate resistance appears to be 29K which will dissipate about 0.6W. I chose to build this as a series combination of 1/2W resistors, values of 11K and 18K, to lower the power on the two resistors since they now split the total voltage drop.

I prepped the unit for the new parts, removing the old series resistor chain and 47K resistor that all had drifted out of spec or failed open. I also reversed the wiring changes introduced by the prior owner for the substitute magic eye tube, since I will have the proper one to insert.

The two filter capacitors I have are 500V rated units, adequate to the voltages I will see now that I am dropping some of the voltage from the transformer across the new 29K of resistance. These are compact modern electrolytics, which I relocated so that I made use of the ground tabs around the rectifier tube socket. The capacitors sit below the tube socket, as does the 11K + 18K pair of resistors.

I made use of a spare pin on the tube socket that is not connected inside the tube, spanning the 29K of resistance from the cathode pin 1 to the spare pin. The filter capacitor and wiring for the B+ line to the magic eye were moved to the spare pin to effect the voltage drop.

When I get my replacement components, I have to install the series resistance chain of 22K and 11K resistors onto the selector switch. I also need to put on the new magic eye tube grid and bias resistors and wire up that tube socket properly for a 1629. The last step will be to put the 47K resistor that completes the voltage divider, completing the divider that apportions my 650VDC as 210V for B+ and -440V for driving the capacitor under test. When I pop in the new tubes it will be ready to go.

Fixing up an old Heath C-3 Condenser Tester


I brought my C-3 over to test the capacitors we removed from the old Alto power supplies, but the unit failed in transit as the magic eye tube wouldn't glow. As the only output to indicate the results of a test, that meant the unit was unusable. 

I discovered several flaky things when I looked into the unit at home. It uses a transformer generating nominally 500VAC through a 1626 tube rectifier to produce both a high negative voltage for testing capacitor leakage current and the B+ voltage of 130 to 200V for the 1629 magic eye tube. It has a resistor that establishes the ground point and therefore divides the DC into the + and - amounts. The two sides have electrolytic capacitors rated at 8uf 475V.

Unfortunately, the transformer is producing more like 600VAC. Instead of dividing 660VDC into -450 and +200, already close to the capacitor rating, it is producing over 600V negative and my B+ was under 100V. I have one problem that is causing the current through the dividing resistor to be too low, which causes B+ to be too low, but that also exposes the other cap to way way more than its rating.

It is very hard to find capacitors at 8uf or higher with ratings of 675V or higher, thus I decided to put two 16uf 450V caps in series and include some high resistance bleed resistors to ensure voltage balance. The target current will be around 0.5 ma in the higher side, so that I will burn only 180mw with that resistor but ensure that two caps divide the voltage evenly. That means I need two 680K 1/4w resistors. The low side will burn about 60mw.

On recommendations from others who have refurbished these, I am replacing the main voltage divider string of resistors on the 'Scale' switch with 2W units as the existing 1/2W parts are close to rating at the high setting and can be damaged when testing caps with high leakage current.

To wrap things up, I ordered new 1626 and 1629 tubes. I will do some cleanup of the unit while waiting for my parts to arrive.

Friday, July 21, 2017

Disk tool working, used to build images for demo at VCF West


I brought the updated logic to Marc's lab, set up the disk tool and successfully wrote cartridges and read cartridges from the Diablo disk drive. We are using the tool to build images for our upcoming demos at the Vintage Computer Festival West on August 5 and 6.

The rest of the day was spent working out the exact software images we needed after developing our high level script for the demonstration. We will show:

  • Bravo, the word processor that was written by Charles Simonyi before he left PARC to go write its descendant, Word, at Microsoft. 
  • Draw is what it sounds like, a generalized drawing program. 
  • SIL is a tool to draw schematics
  • Neptune is the ancestor of File Explorer or similar file management software
  • Ethernet which was created for the Alto and its use for FTP, network booting, file serving, etc
  • Smalltalk, the language and environment developed by Alan Kay to explore object oriented sw
  • Games such as Astroroids, Pinball, and others developed by students doing grad work on Altos

Thursday, July 20, 2017

Testing complete for relay tester, ready to ship

I have been on vacation for a week, no posts or activity but returned to the workshop today. 


We are going to exhibit the Alto at the upcoming Vintage Computer Festival West event, as well as hosting a few panels. I will be on two of them, one concerning the restoration of the Alto and another concerning restoration of the 1401 systems.

This will require development and scripting of demonstrations as well as our material for the panels, but at the same time I want to begin using the disk tool I built to archive the stash of cartridges from Xerox PARC. The tool will also allow us to create disk cartridges to support our demo activity.


Having located the proper code and identified a few tweaks to make to the wiring in the box, I began the adjustments today. As I had earlier written, the four or six sets of contacts in a relay could be identified with ordinal numbers starting from either end of the relay, but I chose the incorrect end.

Rewiring those connections will give me a box that works properly with the unmodified code developed by Stan, thus keeping the two relay tester boxes in sync as future changes are made.

I ran the tester through its various functions, using a relay from our spares stock and found that I still have one flaw. I can individually drive the pick or the hold coil in the relay under test. The Arduino pulls down a wire for each that is connected to the dual relay module inside the tester. However, the relay modules only click on when both pick and hold wires are activated, not individually.

We reasoned that this is due to a short between the two wires driving the dual relays. If they are shorted, then one is outputting high and the other low if I try to drive only one of the two coils. This produces an intermediate voltage, not 0 and not 5V, which is too high for the dual relay module to fire either relay. When both are active (low), the wires are down at 0 and the relay module will click on.

I opened the box to locate and correct the short. With that done, everything is working correctly and this is ready to be shipped to TechWorks! for use with their 1402 reader/punch. I wrote up a user manual and will ship that along with the box. Stan is going to set up a laptop to ship with the box, allowing this to be a turnkey test system.

Sunday, July 9, 2017

Finished construction of the permissive make relay tester


My grommet supply arrived today and I finalized the holes after selecting the ideal size grommet for the LEDs. I seem to always underestimate the hole size required to fit in the grommet, but eventually got it right. After installing the LEDs into the cover, I was ready for applying the insulation - a rubber insulator that is brushed on over exposed wire junctions to form a protective coating.

Unfortunately, two things went wrong today. First, my existing bottle of connector coating is partially dried out and almost empty. Second, when I got over to CHM to check for the updated Arduino code that runs this version of the circuit, I couldn't locate it. Stan will need to hunt it down tomorrow.

Frys did have the connector coating in stock, which I ordered for pickup in the afternoon.  After lunch with my wife and a friend, I dropped them off and rode over to grab the purchase at the store. After it was applied, I loaded the out of date sketch.

I can accomplish some testing of functionality using the old versions of the sketches provided by Stan, which proves out ability to pick and hold, rattle relays and test contact resistance. First I did a test with only the USB link powering the Arduino and its relay board. All the LEDs and the relay module fired properly and the sketch communicated with the PC.

Next up was a test with the 20V supply activated in addition to the USB link. That way I can see if the relays pick and hold using a red relay plugged into the socket. The relay magnets did seem to work fine although the first flaw was uncovered. When the tester believed it was using the green relay socket, my LED lit under the red socket.

The next flaw was uncovered when I noticed that my relay module was active initially, although I believe the code thought that both Pick and Hold coils were off. My LEDs light when the drive line is high, but the relay module is off for a high voltage.

I can fix both of these flaws easily. The relay module can be changed to use the NC contact to drive the LEDs and pick/hold coils - when the relay is off, the lamp and coil will be on and vice versa. I could move the two LEDs under the relay sockets allowing the proper one to light. Dealing with the pick and hold LEDs is more complex but I can just swing the pick and hold LEDs onto the actual relay socket pick and hold wires, adding a suitable additional resistor to limit current.

Next up, I added the 5V supply and tried measuring contact resistance on the red relay. I can't check circuits 5 and 6 as these are only on green relays, but I had some interesting readings for the others. I will have to check this with Stan tomorrow when I am retrieving the correct code.

The quality of the contact test readings is mediocre as I don't have the code that makes use of the voltage reference from pin A15, but I could check out operation well enough to prove that my wiring seems sound.

I will haul this into CHM tomorrow to check it out with Stan - who will be hunting for the updated code - and I can work out any wiring changes needed before closing everything up. 

Saturday, July 8, 2017

Built RF amplifier to interface digital VFO to Heathkit HW-100 transceiver


I tweaked what signals are displayed on the LEDs and that show on the seven segment display, otherwise no change to the disk tool as it is simply waiting for the chance to test with real drives, disk cartridges and Altos.


The digital variable frequency oscillator I built to improve the HW-100 tube transceiver produces a low voltage output with 50 ohm impedance. I had tried to leverage the existing tube amplifier in the analog VFO to try to boost the signal before it is mixed with the local oscillator in another tube.

The impedance match is wrong and the tube really needs a larger voltage swing, leading to poor results as it sat. I found a kit by W1AFFL that will boost and match impedance to the tube in the HW-100 from the 50 ohm low voltage swing produced by my digital VFO.

I completed the kit in my spare time today and will put it with the rest of the HW-100 project to resume work in the near future. I have to concentrate on the relay tester, 1130 light panel and Alto efforts first.

Friday, July 7, 2017

1402 Permissive Relay Tester construction nearly completed


I bored out the hole for the power cords, inserted the grommets and then tied the cord strain relief inside. Began soldering grounds together, the +20V to the two relay module contacts and the +5V to the 0.1 ohm resistor leading to the bank of resistors hooked to the individual contacts.

Beginning to wire up the insides of the tester
I had some wiring to accomplish between the relay module and Arduino, set up all the grounds from power supplies to Arduino and the two relay test sockets, solder up headers for all the contact wires from the relay test sockets, and finally hook up my four LED units.

The pick and hold coils circuits were wired to the relays, including the snubber diodes that will short the back EMF as the coils are released. I partially wired the two LEDs that illuminate that will show when the pick and hold circuits are energized. The ground connection to the Arduino was installed, but there was still quite a bit more to do by midafternoon, mostly involving wiring stiff wires to small header pin ends.

When dinnertime arrived, I had all four LEDs wired in, the relay module connected to the Arduino, and the only wiring left to do was to hook the twelve contact leads (6 each for normally open and normally closed sides) to the header that connects to the analog input pins on the Arduino.

Early evening brought completion of all the wiring. Two of the header strips were left detached, giving me more working room to install the LEDs, but they only need to be plugged into the Arduino to complete all circuits. I carefully tested everything for shorts while I was wrapping up, so that as it is ready to have power applied.

Final tasks that will wait until Sunday include

  • insulating all the bare metal soldered junctions, 
  • inserting the proper grommets into the cover, 
  • mounting the LEDs into the grommets,
  • install the headers onto the Arduino and
  • close up everything after testing
Too, I have to visit CHM over the weekend to pick up the current code (Arduino sketch) that matches the circuit. The major change is the addition of a 0.1 ohm resistor between +5V and the individual 33 ohm resistors feeding each contact.

The code adjusts the voltage measured on each contact (powered through its 33 ohm resistor) against the voltage at the junction with the 0.1 resistor. The contacts are connected to ground by the relay and any voltage above 0 at the contact is due to resistance in the contacts.

Thursday, July 6, 2017

Disk tool now working for both read and write; continued building the relay tester


Problem spotted and corrected. The deserializer emits a signal called gotword for the duration of the bitcell, 600 ns or 30 fpga cycles. In that time, my ReadField logic will take the extracted word, store it in RAM, adjust the address of the next word to be stored and loop back.

This takes less than 30 cycles therefore I was trying to put the same word away a second time, instead of waiting for our next incoming word. It was solved with a simple interlock keeping the state machine in the address manipulation state until gotword goes inactive before going back to look for the next word.

I now read the sector but get a checksum error on the first record (header). The data appeared to be shifted in correctly and at the correct time, but the error comes when the comparison between the incoming word and the computed checksum fails. I therefore altered the testbed to emit the running checksum value and watched that for signs of problems.

The checksum matches what was extracted from the bitstream, so the flaw is more subtle. I again changed the emitted signals to allow me to watch the state of the error flag during the test - another 30 minute pass through the toolchain - and observed the results.

What I saw at the time of the test and immediately afterwards was a good status for the checksum, yet the result when the ReadSector transaction completed was an error marked for the header record. I took another half hour, passed out the point in time when the error is recorded as a signal, and examined what was occurring around then.

The ReadField transaction is run three times per sector, at the request of the higher level ReadSector transaction. Each time, the parameters such as preamble size and word count are set up while triggering the inner transaction to run.

When the inner transaction returns to its idle state, the outer transaction should advance to set up the parameters for the next record and trigger the inner transaction to handle it. What I am seeing is that the inner ReadField transaction returns to its rfidle state as it should, sits there for only three cycles and then appears to kick off in another transaction.

This should involve the outer ReadSector transaction stepping from its rsread1 state to the rsset2 setup stage to trigger the inner machine to handle the second (label) record. The outer machine does NOT advance to rsset2; that only occurs at the next rfidle stage of the inner machine.

This means that the inner transaction tries to read the label record but with the long preamble and short word count that pertains to the header record. It fails to produce a good checksum and that is how I get the error status recorded.

I will confirm this with a change in instrumentation, twiddle my thumbs until the testbed is ready and see what is actually taking place. If this is the case, I have a problem with my ReadSector transaction not stepping properly to its rsset2 stage, even with three cycles of the triggering rfidle state from the inner transaction.

Since I did have the problem - the step rsread1 took just a single cycle thus really didn't read the header record - I modified the outer transaction to interlock better with the inner one. That is, kicking off each read step involves a wait step that insists that the ReadField transaction left its rfidle state before it starts looking for the inner to end with rfidle later.

I need to see that the ReadField transaction runs properly three times at the correct time in relation to the outer ReadSector steps, Once that works, I can check to see if the checksum verifies good reading and then verify the contents of RAM to match what my dummy data driver is emitting.

Both tests worked well. I even performed the upper level ReadEntireCartridge transaction which bumps through all the sectors, issuing ReadSector for each in order. The file produced looked good, but since I used contents of all zeroes in my dummy data, it doesn't absolutely prove out the logic.

Therefore, I planned to write some unique data values in each record, first with invalid checksums. I should see all my data captured in the file properly when I 'read' the cartridge, but each sector should reflect the checksum errors. After that works, I can add in the appropriate checksum values and test to see if my logic is now reading 'without errors'.

I had previously built a spreadsheet that is designed around the three record format of an Alto sector. I enter the data words I want and the spreadsheet displays the appropriate checksum. Since it gave me the correct values, I first verified the checksum failure for the two records where I deliberately stored a bad checksum.

I then corrected the data stream, waited a half hour for the toolchain to complete and verified that all worked properly. I found the data properly stored in RAM, matching the values I used, meaning I can consider the logic to read cartridges to be working.

I took a look at the WriteSector state machine to see if it could benefit from the improved interlocking I used on the ReadSector peer machine.  Indeed, it is amenable to the same improvement, which I introduced. Once I wrap up the reading tests, I can quickly do a WriteEntireCartridge to validate that the logic still works.

As of dinner time, both ReadEntireCartridge and WriteEntireCartridge transactions are working properly to the extent I can test them without a live Diablo drive or a real Alto. However, I am reasonably confident and look forward to the testing.


I found a good way to anchor the Arduino and relay modules down inside the box. I had to make some holes for power and USB cables to attach, stick in a barrier strip and add the four LEDs to the cover. Once done, I could wire up the tester and be ready to go.

I tried some acrylic glue to anchor the relay module inside the box, further fixing it firmly. With that done and proven out, I did the same treatment for the Arduino itself. A hole was drilled and covered with a rubber grommet for the USB cable that connects to and powers the Arduino.

I need to decide how to route in the power from the two power bricks - one at 20V and the other at 5V - which drive the relay coils and contacts respectively. I could just drill holes and knot the wire inside and out to anchor it in place, or I could attempt to install sockets on the side and matching plugs to the power cables.

Four LEDs have to be installed in the cover. There is one under each of the two relay sockets, to indicate which is active for testing. The other two are in the center of the cover and light to show when the pick and the hold coils are active. I have a grommet assortment coming which will allow me to mount the LEDs cleanly in the box. The grommets will also help with the holes for power cables or sockets.

I did find a reasonable grommet for the power cables to enter - sans sockets - and drilled a first hole. It is a bit too small in diameter, so it needs to be drilled out with a slightly larger bit. I will take this on tomorrow, then install the power lines and knot them inside for strain protection. I still need the mini grommets to mount the LEDs.

Tomorrow, I will grab four LEDs and wire them up, before beginning the final wiring of the unit. I decided against the use of a barrier strip, instead using point to point wiring. All these soldered junctions need insulation, which I will apply with my 'rubber in a bottle' paint on insulation.

The copy of the sketch that drives the Arduino is out of date, not including the improvements suggested by Ron Crane that improved the accuracy of the testing by way of a known voltage drop. I will need to find that code on the laptop at CHM where the original tester sits. 

Wednesday, July 5, 2017

Core problem on 1401, progress on disk tool and in wiring up relay tester


Our Connecticut system has a bad core location up in high memory. Consistent errors at one location thus it is almost certainly a single core issue. It will be fun to fix that one. Otherwise, both systems are working fine.

One of the 729 tape drives has had a problem with a coupler failing that connects the capstan to its drive motor. The rubber disintegrated. A different coupler was installed but it appears that the shafts are misaligned somehow which is putting the stress on the coupler. We will watch to see if this coupler will work long term, otherwise we must either correct the alignment or do some other more serious surgery. 

George was working on his SMS card tester, which has signal issues in the cabling between the digital logic section and the analog card or somewhere on that card. 

While working on that, we discovered that a consequence of using the laptop power bricks to supply the +/- 19V power for the unit is that the ground of the SMS tester is actually set 20V off from ground of the oscilloscope (thus 20V off from the AC nuetral). We will move over to a lab power supply, using it to provide the input voltage without the ground offset, and see where we get to. 


Finally today I beat my dummy data driver logic into shape and have a properly formatted string of data bits going into the disk tool, looped from some temporary output pins, to let the logic attempt to read a sector properly. With this, I can check and debug the ReadSector logic.
Now I can use the logic analyzer and track the operation of the ReadSector and ReadField state machines. First step in reading any field is to sync up by finding the first non-zero data bit, from then count off bits in each word as they are deserialized and stored in RAM. Right away I can see that the first non-zero data bit came in but the logic did NOT work properly from that point.

The trace shows the sync state being properly recognized from an initial '1' data bit yet the checksum validation failed. I began reconstructing the signals to watch the extracted words from the deserializer. It should tell me whether I am reading the stream on the right boundaries, when I resume testing tomorrow.


Today I found some clamps used with the relay sockets as they are installed on 1950s era IBM equipment. There is a clamp that latches over one end of the socket, providing round holes for screws to mount the socket properly, but the other end of the relay does not fit these. It seems that IBM used long common bars that a group of relays would slip under, anchoring them individually with the small clips I found.

The clips come in two widths, for the red 4-circuit and the green 6-circuit relay types. I altered one of each clip type, cutting off enough so that it could install upside down on the far end of the relay socket, still giving me holes for mounting screws.

I used these to firmly mount the sockets into my box and could do the final wiring of the relay sockets. Next up I have to mount two boards inside the box - the Arduino Mega 2560 and the dual relay module - plus a barrier strip.

Top with relay sockets mounted
Additional steps are routing of two power brick cables into the box to a short barrier strip, cutting an opening to insert the USB cable through the box onto the Arduino and final wiring of the relay socket wires to the components inside the box.

Arduino and relay module to be mounted (also a barrier strip)
Wires and resistors installed on sockets, ready to insulate

Tuesday, July 4, 2017

Wasted day fighting the disk tool logic to produce dummy disk data bits


I discovered that the toolchain had become confused with a change I made inside the process that spits out the dummy data stream to test reading. I have an array of about 350 words of data that represent the contents of a disk sector, clocking them out one bit at a time until a 16 bit word is exhausted and then advancing to the next word.

It had worked fine, but I wanted to reverse the polarity of the bit being emitted since the disk drive delivers inverted data. I did this with a variable inside the process, which should work fine but the toolchain blithely claimed that my array of data was used but never assigned. It is assigned as an initial value on the signal declaration, however it forgot that and gave it the default value thus always 0.

Took a several hours of fighting with the toolchain before it would do what I asked and deliver the data stream I had initialized into the block ROM. I can't do anything until it begins emitting the pattern I set up. I tried many methods, finally extracting the relevant logic into a separate module that I could easily simulate to discover exactly WTF is going wrong.

The extracted logic simulated fine and is purely combinatorial. I instantiated it into the main logic and synthesized everything to test once again. It again failed to work. I even output the signal on a separate pin just to validate that I didn't have a dead output line, but the results were the same.

Tomorrow is the holiday (July 4), when I will be mostly busy with family, but I will do one last synthesis to output the states of the driver logic that extracts my dummy date. Then when I resume I can get to the bottom of this.

Sunday, July 2, 2017

1130 light panel upgrade ready to install, 1402 relay tester relay sockets being wired


Two observed problems in the ReadSector function must be investigated and corrected. First, the function starts off as if it saw a 1 bit coming in from the drive, indicating a sync word, but this occurs even if we only inject zeroes. Second, the read functions don't parse the incoming stream properly.

I lack confidence in the logic that detects sync, thus my first pass at the machine will expose signals needed to debug the function of the logic. I generated external signals both for the logic analyzer and on LEDs after dinner but didn't have time to test today.


Finished up the last 24 bulb assemblies and installed them on the last PCB. The three cards are now ready to be placed in the 1130 panel and have the power lines wired up. I have to move some items around in the garage to make room to properly deal with the 1130. Too, I have swapped plugs on my extension cord to use with my electric vehicle charger, so I would have to swap back to power up the 1130. Later this week for that work.


I found that I could solder the resistor leads into the socket, after doubling over the lead, if I dipped it in rosin first and then carefully soldered. I did one row, after which I needed to solder in the common contact wires before I did the other side's resistors. Too, I have to solder in four wires on each side to carry the signal over to the red relay socket.

By late afternoon of day 1 I had the green socket wired with its ground, all resistors, and four wires to run over to the red socket on one side. Four more wires were needed to run to the red socket, plus twelve wires soldered to the far ends of the resistors that will run down to the common 0.1 ohm resistor.

Early evening had the remaining wires on the green socket and all the wiring on the red socket that can be installed now. There are eight wires that span from the green to the red socket which are attached already to the green but must be soldered down in situ to the red socket after they are mounted on the cover.

In the morning of day 2 (Sunday July 2) I had cut the openings and drilled the holes on the project box cover. I began mounting the relays, affixing the green one first so that I could route wires out the hole of the red socket letting me solder them to the red socket while it was loose.

I discovered that mounting the relay socket was trickier than I expected, since the socket only has half-circle holes on its edges. The screw had slips off as the screw tilts away from the socket. Perhaps I need a bent metal cover with holes drilled for the screws and a 90 degree section that will stand as tall as the socket.

Hmmmm. Thinking about alternatives as well. Can't proceed until these are bolted down properly. Will try larger diameter screws as well, but the shortest spacing of the holes is 5/16" on centers which doesn't allow for more much of a nut diameter.