Nonpareil
Just got back from Anchor Electronics in Santa Clara, buying a bunch of wire-wrap sockets, wrap-IDs, and a few chips. Together with other chips, DC-DC-converters, etc. I've ordered from Mouser and Digikey, I should have enough stuff to build the next version of the romsucker, which is what I use to capture traces and ROM dumps from the old calculators.
Wire-wrap seems to be an obsolescent technology, but it's still useful for simple things that don't need insanely high speed signals. Actually it's not the frequency of square-wave signals that's a problem, but rather the edge rate, and almost all modern chips produce really fast edges.
The old romsucker used an LT1045 hex level shifter, but the input impedance isn't high enough. There are comparators that have better input impedance, but the input voltage swing exceeds their common mode voltage limits. The older calculators have some signals range from -12.5 to +6.5v (PMOS) or -6.5 to +12.5V (NMOS). The clocks have the full 17-19V swing, but the other signals do not.
Most comparators and op-amps have a very limited common mode range, often just a few volts. The LM311 comparator has a fairly wide range, but is quite slow. And most newer comparators and opamps won't run on +/-18V like the old ones.
I'll be using the MAX901 quad comparator, which runs on up to +/-5V supplies, and has a propogation delay of under 10 ns. That's much faster than I need, but there's not much middle ground between that and the old, slow comparators. The common-mode range is from the negative rail (-5V) to 2.25V below the positive rail (+2.75V). So the calculator signals will need to be attenuated by a factor of 4.6 or more.
My first thought was to use a simple two-resistor voltage divider on the inputs. Then the input impedance will be the sum of the resistor values. But by making the resistor values high, the RC time constant is very large, so it will slow the input edges far too much.
Mike suggested using a JFET input op-amp (very high input impedance) in an inverting configuration with a gain of 0.2, so that it acts as an attenuator and buffer. A little reading suggests that op-amps have serious stability issues below unity gain, so this approach might not work too well.
The best option seems to be to use a JFET input op-amp as a voltage follower (unity gain), followed by a two-resistor voltage divider. The output impedance of the op-amp is very low, so the voltage divider can use fairly small value resistors to avoid slowing the edges. The only problem with this approach is finding a fast enough op-amp that has a common-mode input range of +/-12.5V. Not easy, as most of the op-amps with CMR approaching or including the rails will only operate on lower supply voltages.
I turned up the TI TLE2074 "Excallibur" quad op-amp. It's fast and has high input impedance. The CMR only goes to 4.1V above the negative rail. However, it can be run on up to +/-19V supplies. If I use -18V for the negative rail, -12.5V will be well within spec. Before I only had +/-15V supplies (from a dual-output DC/DC converter), so I ordered two +/-12V converters. The outputs are floating with regard to the inputs, so I can use the pair as a +/-24V supply, and use 7818 and 7918 three-terminal regulators for the power for the TLE2074.
This is a lot more hassle than I expected. In the old days there were interface circuits specifically made for interfacing MOS to TTL and vice versa, but those are long since obsolete, and weren't as flexible as I need anyhow.
On the new romsucker, there will be 16 input channels. All the comparator thresholds will be adjustable via DAC outputs. The comparator inputs will all go into a PIC so that some processing can be done in the romsucker. This will eventually be needed in order to dump the ROMs of the first and second generation calculators, because the romsucker will have to generate address bits and drive them on the serial bus with the right timing and PMOS (or NMOS) levels.
Once the new romsucker is working, I'll be able to capture traces from a real HP-25 to find out why the logarithmic and exponential functions aren't working correctly in Nonpareil.
Computer History
This morning a group of Computer History Museum volunteers went on a tour of the USS Pampanito, a WWII-era Balao class Fleet submarine moored in San Franciso. The normal tour is very interesting, and I'd definitely encourage anyone interested in naval history and technology to go, but for us the highlight was a specially-arranged tour of the conning tower, normally off limits to the public for safety reasons. This allowed us to see the Mark III TDC (Torpedo Data Computer), an amazing analog computer used for computing torpedo headings from visual or sonar contact.
The TDC worked much better than the systems in use by our foes, at least partially because it tracked the target in real time, taking into account the submarine's velocity, while the foes' systems apparently did not.
Also of interest, and visible on the public tour, is the
ECM Mark II
cipher machine. While this was a rotor-based machine that in principle this machine performed the same functions as the famous German Enigma cipher machine, it was much more sophisticated. Instead of advancing the rotors one position at a time like an odometer, it had a second set of rotors that controlled the advances of each of the main rotors.
It occurs to me that this dual-rotor system is not unlike one of the methods used in more recent times to generate pseudo-random numbers. LFSRs (Linear Feedback Shift Registers) can be used as PRNGs, but have many undesirable properties. Sometimes one LFSR is used to control the step rate of another LFSR in order to improve the "randomness" of the results.
Many people on the tour were heard remarking about how incommodious the submarine is. Having heard for many years that they are quite cramped, I actually thought the real thing was not as bad as I'd imagined. But I still wouldn't want to serve on one for months at a time.