I drew up this years ago when I was reading more about
these issues:
http://www3.telus.net/~bhilpert/tmp/conceptsmachines.gif
although I don't think I was the first to arrive at such a diagram. Of
course there are various improvements that could be made. And I
suppose there may be arguments about the arrow from the ABC to ENIAC.
I admit that your ABC page is over my head, technical-wise. So, I asked
Bill M. for his opinion. Here is what he said (with permission for me
to quote it here):
----------------------------------
The [Atanasoff] machine had several operations, which were initiated by
pressing the appropriate button. Two of them were decimal input and
output, and just one that did arithmetic. Calling the arithmetic
operation "programmable" and assigning it an adjective like
"data-sensitive" is a stretch; if you use those terms so loosely, you
will have to say a mechanical adding machine also has those properties.
There were 30 separate adders and 30 pairs of coefs. The user had to
select which pair was to be eliminated. This selection happened by the
human moving a jumper cable from one set of holes to another. Selecting
one of the 30 for final output happened in a similar way, I believe. The
I/O for cards happened in groups of 5 and had real switches.
But except for selecting an input, there are no "programmable options"
on the arithmetic. There was a switch you could set, so that it would
either start with a subtract or start with an add. (Once it started it
would flip back and forth.) The user has to know which way to set this
by examining the signs of the coefs. I wouldn't call this a
programmable option as much as a hazard. If you set it the wrong way,
the machine runs forever and never finishes. (Well, not forever, it
will definitely finish in 2 to 50th seconds. 35M years.)
As to the other part, data sensitivity, this is somewhat true. The
machine is doing a "long" division by repeated adding and subtracting.
In the end, the result is just a simple math operation, but the length
of time it takes is dependent on the actual numbers you plug in. It is
literally just testing if the sign bit flipped, and throwing a relay
each time it does. I guess you could say every multiplier is data dependent.