With the help of Ted Ross I wrote a music program for the IBM 701 in 1955. The plan was simple — a loop would iterate until it was time to flip one of the sense lamps on the console. This loop duration set the frequency of the note. An outer loop would repeat this for the proper note duration, and the outermost loop would step thru a table of note frequencies and durations. The result was a square wave which is actually a rather pleasing sound. This was the state of the art as we knew it for a number of years. We tried some Bach and Mozart and all agreed that the medium worked for Bach but not Mozart. Others had already done this stunt.

When the 7090 arrived 6 years later it was at least 7 times faster and it occurred to me that it might be possible to perform multi-part music. I tried for three part. The plan elaborated on that of the 701; figure out which of the three notes should next transition, wait (loop) that long, flip the appropriate external bit and fall to the outer loop to time the duration of the three note chord. The time to figure out the next transition was significant and could not be ignored and indeed it might already be “past due” whereupon you would take the next step and try to catch up. All of this code was self aware of its execution time as there was no clock hardware available; instruction times were specified. The sound was horrid; muddy and worse than mere noise; scarcely a hint of pitch. I think that the problem could be described as inter modulation distortion. The ear will put up with any particular set of harmonics for a note, but the interactions between them, due, I suppose, to the late transitions, was too much. The total chord duration was right which suggested that the code was running as designed; the design was kaput.

About a year later I visited the IBM lab at Mohansic. As I entered there was a 704 playing four part christmas carols. The 704 was scarcely faster than the 701. I was mortified. The good news was that looking at the console lights immediately revealed the trick; it was not very profound. The accumulator was divided into three 12 bit fields, one for each of three voices, and a constant was added to the accumulator at constant rapid rate for the duration of the chord. The constant was likewise divided into three corresponding fields. An index register similarly incremented provided the fourth voice and yet another index register controlled the duration. The frequency of respective overflows was the frequency of the notes. The signals that drove the lamps that displayed the accumulator were available externally. Among those signals were those that flipped upon overflow. The resulting sound was very satisfying!

This was a contravariant-covariant transformation of the problem. In the original 701 formulation of the problem the pitch control information was duration between cycles of the note whereas in the 704 scheme the note information was frequency. That possibility had entirely escaped me.


Here is a great tale of similar exploits which is almost certainly true. This is a tale that I cannot personally vouch for.