Sunday, July 30, 2017

Found bad custom chip part in 7854 scope and replacement part is amazingly available


I can see that the Display board is generating the XYINH signal that should block the analog scope signals from being displayed during the digital interval, however the characters are smearing because the analog signals are not inhibited.

Further, in looking at the way the characters are distorted, it is strictly in the horizontal direction. The top and bottom of the character is never affected, but the left to right placement of the pixels is impaired. That suggests that the flaw is in the Horizontal Amplifier circuitry, which is not acting on the XYINH.

Looking at the horizontal circuitry, I see one place where XYINH is fed into a custom chip that is the channel switch. This chip is available on ebay as New-Old-Stock just in case it appears that problem is there. It will have to come from the island of Rhodes, meaning several weeks of transit time, but is reasonably priced all in all.

When checking out the rest of the scope, I observed that only the B horizontal plug-in is working, the A plug in does not cause traces. Swapping the actual plug-in modules made it crystal clear that the problem is in the horizontal switch circuitry, just where my other problem is manifesting.

The circuitry in question is on board A9 inside the main body of the scope, not on the plug in boards on the side. It is behind the plug-ins, which suggests that access a real pain. However, when I began disassembling I found that it was brilliantly designed for easy access.

Card A9 exposed behind metal plate
Card A9 seen from underneath
A metal cover plate blocks each of four possible card positions, with the card itself designed to fit through the opening exposed. I only had to remove a bunch of coax cables and one small connector, take out two screws and it slide right out.

Card removed through opening
Access from behind plug-ins
The switching chip is right at the beginning of the circuit path on the board, routing two sets of horizontal signals from the A and B plug-in positions, switching with the Benable signal and blanking with the XYINH signal. This is pretty clearly the part that is fried, so I bought the NOS spare from ebay.
Suspected chip circled at left
New Old Stock chip to replace on card

Saturday, July 29, 2017

Ups and downs with Alto demonstration, finished the Heath C-3 Condenser Checker restoration


The last of my replacement parts arrived today and I soldered everything together. The chain of higher wattage 22K resistors were placed on the selector switch. The octal socket for the magic eye tube was wired up. New tubes were then placed into sockets. Finally, I fired it up to check the voltages and gross behavior. 

The magic eye glowed properly, voltages seemed sane, so I moved on to check some components. The resistance test range was close to the resistor value and can be calibrated by moving the dial on the pot shaft if I wished to. The capacitance check worked well for a .1uf capacitor, as did the leakage test. 

I then put in a 16uf 450V electrolytic and did some capacitance and leakage tests. It worked exactly as it should for both capacitance detection and leakage testing. The tool is now properly restored and ready to use with those suspicious power supply capacitors. 

Restored C-3 Condenser Checker

We attempted to clean the heads on the disk drive, using Kimwipes and isopropyl alcohol. The bottom head is easily visible but seeing the top one involves mirrors and awkward angles. It seemed that the head was okay and they landed okay on the cartridge that originally had the problem.

We then wanted to write our demo image on one of our three writeable cartridges - those that don't have historical data from PARC - but immediately the drive began cycling the solenoids in a loud clicking manner that we associate with head crashes. I immediately switched off the drive and removed the cartridge.

We can barely see what appears to be packed in oxide on the upper head, thus our earlier cleaning was insufficient. Inspecting the pack shows signs of a crash as well, brown rubbing on the oxide in a ring. No aluminum substrate exposed and no apparent ridges, thus the pack is probably still usable once the cause of the crashes is corrected.

We decided to switch the disk tool over to the drive attached to our Alto. This has good heads and we placed one of our good cartridges in the drive to write the demo image. Using the disk tool, however, showed a troubling sign. Rather than seeking crisply and regularly through all 202 cylinders, the drive would advance slowly and irregularly.

I believe this may be a grounding issue where the drive with our head crash is well grounded through the signal cable but the one in the Alto is not. Poor quality signals could account for the failure to 'see' the ready signals that follow each seek. Further, this likely means that the data being written or read would also be suspect.

I did a ReadEntireCartridge and processed the captured image. Comparing this to the image I used to write the cartridge earlier showed many small errors across the disk. Whatever signal fault exists with the tool attached to this drive, it must be corrected to get reliable operation.

We booted the disk image I had written, got a Alto Executive prompt which seemed promising, but found that while most programs seemed to work, SIL did not. We ran the scavenger program which clears up problems on disks by finding mismatches between the disk directory contents and the chaining information in the label records of each sector.

If found quite a few problems, many in SIL related files, and attempted to fix them. It also found problems in the high-res picture we display late in the demo, which was missing the bottom fifth and had an obvious bad stripe in one spot up higher.

To proceed with our demo and other activities today, we switched over to doing a copydisk over the network from the same image placed on the LCM bridge. That worked and we could move ahead with our taping and demo practice.

 We videotaped the demonstration with wide shots in the afternoon. Once some screen closeups are taped, to be used as insets or spliced with the main taping, a complete video can be edited together to share the demonstration on YouTube.

Finally, we worked on the presentation we would give as part of our panel at the Vintage Computer Festival West conference next week. We spent hours tightening it up, rewording and strategizing on how to squeeze it into the slot we have available.


I have a Tektronix 7854 scope, which is a mixed analog and digital scope that timeslices access to the screen between the two sources of display information. It displays characters on screen in the digital mode, but they are distorted while the beam is sweeping from the analog side. The logic should be switching the analog off while displaying digital, and vice versa, but it appears something is going awry.

I began scoping the various signals involved in this timesharing of the CRT. The first three I could measure had an easy to reach set of testpoints at the top edge of the card. The next few are internal or the testpoints are so far down the card that they are blocked by adjacent cards. I pulled the card and stuck some probes on the points I need to monitor, then reseated the card.

All the control signals appear to be switching as they should - at least their relative timing and shape are correct. My next set of tests, after pulling the card again and changing probes, is to see if the vertical and horizontal outputs of the analog section are indeed going to ground during the digital interval.

Tektronix scope being debugged
There is an Intersil DG181 DPST switch that grounds both lines when in the digital interval, but if that is failing then the analog signals will interfere with the sweeps from the digital/character generator section. I will watch the sweep outputs to see if they are non-ground level during the digital interval. This will have to occur tomorrow as it is too late to continue out in the garage tonight.

Thursday, July 27, 2017

Fixed triple power supply from a flea market


At a flea market, I came across a triple power supply for a very attractive price. When I brought it home, I noticed that a switch on the first section, which changed the meter between voltage and current readings, was mechanically broken. I also heard some rattling inside.

The switch was a common small switch that I had sitting in my back room, so it was a quick fix. The rattling sound was a heat sink with four power transistors, powering the third section which could deliver relatively high current but lower voltage than the first two sections. I attached it to the standoffs, which was all that was required. 

Testing showed that all sections worked properly, including their current limiting circuits and overvoltage protection. This will be a very useful bench tool that I acquired for $40 plus a few minutes replacing a switch and attaching a heat sink assembly internally. 

Wednesday, July 26, 2017

Restoration work on Heath C-3 and on a 1401's card reader


Most of my replacement parts arrived, including the 1626 tube, which I soldered into place. I do have two problems that will require more part orders. First, since I am reverting the design back to the 1629 magic eye tube from the 6E5, it switches the required tube socket from the six pin part I had to remove and an octal socket for the 1629.

Second, part of the first order was wrong. I remember that when I found the 22K 2W resistors on Digikey, I initially ordered 6, the quantity I needed. However, the web site popped up an alert telling me that for the same price I would get 10, because of the volume break at that number. I approved the change but didn't check closely to see that it had changed the type of resistor to a 1/4W 10K that I don't need.

When I was ordering the 22K resistors today, the same pop up was delivered but I cancelled out of it and manually ordered 10 of the desired part. It was now correct and will arrive later this week or over the weekend.

I am awaiting the new 22K resistors, the octal tube socket and the 1629 tube, after which I can wrap up this restoration and begin using the checker.


We have been fighting erratic reading on the 1402 reader that is part of our "Connecticut" system over the past couple of weeks, but today someone noticed that dust was wedged into slots in a plastic disc used with a solar cell to generate the timing pulses for the 12 card rows. With an air compressor and vacuum, the disc was cleaned and our reader is back to proper operation.

We still have a permanent error in core at one address (high in memory, fortunately). We will try varying the core unit voltage in both directions to see if we are right at the edge and failing on the weakest core, or if we have a more pernicious flaw in that core location.

If we can't get the core working, we have a spare 4K core unit that we can swap in. It is a major task, but much easier than disassembling and rethreading a core plane to replace a bad core. 

Tuesday, July 25, 2017

Wrote demo disk cartridges, practiced VCF-W demo and continued archiving PARC cartridges


We met today to work on the demonstrations we will give at Vintage Computer Festival West in a few weeks. Ken and I had built disk images using the LCM's Contralto emulator, which I wrote onto two disk cartridges using the disk tool. With those, we began booting and practicing the demonstrations.

Marc also recorded the demonstrations which he will post to YouTube in a few weeks.

In addition, I returned the batch of disk cartridges to PARC since we had archived them already. I took a new batch of 30 back to Marc's where we can read them all with the disk tool to ensure the contents are preserved for posterity.

I successfully archived four cartidges, giving us two dual-disk Mesa images and source code of Press, but while reading the fifth disk we had a minor head crash at cylinder 184. The disk surface doesn't look too bad so once we clean the heads on the Diablo drive, we should be able to extract the contents.

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.