As with everything related to the Analytical Engine, you have to consider it as a function of time. The Engine was constantly evolving.
In the Early versions the store was limited in size, wrapped around the same large circular wheels as the mill. Any transfer from one column to another left the source column at zero and retaining a value required an explicit copying and restoration action.
- in the version that AAL describes, to zero a variable would require to subtract it from itself and then store it into itself.
- restoring was would have been impossible, as a zeroing copy to the mill left no futher copies anywhere, and the mill always returns only one copy. Unless more than one Receiving-card (from mill to store) was allowed. – Rainer
Later, Babbage extended the store by introducing linear racks that could extend off to the side an arbitrary distance. This introduced a new problem, because those racks, while unlimited (in principle) in length had a very limited amount of lateral travel. So, after one or more transfers had been made, they had to be restored to the starting position.
- Don't understand this. What is „lateral travel“? What is the „rack“? But does not really need an aswer. – Rainer
Take a look at the Plan 25 drawing. The racks and store are the portion disappearing off the sheet to the right. The rack connects the store axis to the ingress or egress axis. Since it's a rack (ie not circular) its position has to be carefully managed so as never to hit the limits of its travel. The restoring axis kept track of that motion and by reducing it to zero the rack would be restored to its staring position. – Tim
Babbage realized this was a opportunity, because by leaving a store column engaged with the rack while it was being restored, the original value could be restored to the store column also. So this is the origin of the choice Ada had in either the destructive or the non-destructive readout. A non destructive read does require a long cycle though, where a desctructive read could be completed in a short cycle.
- But where comes the duplication of storage in here? – Rainer
See above, the restoring axis provides temporary storage – Tim
After this point in the development, it would simply have been a convention, not a requirement, that store registers be left at zero after the last use.
- yes, but we are also dealing with the way the machine was assumed to be used, and this might be historically interesting.
- Was there a means to clear all variables before a programme starts?
– Rainer
Not directly as far as I know. Babbage variously said they would be set by hand, or that they would be initialized by reading number cards. There was no reset button [which is a big problem for the microcode as it uses exclusively relative addressing] – Tim
One of the horrendous practical programming problems still remains, that a column must be zero before a new value can be transferred to it. As far as I know Babbage never hit on the modern semantics of store operations in which the previous value is automatically erased. This may have been another incentive to leave things at zero when no longer needed - to reduce the probability of error if a column is reused later.
- Ah, but this is nowhere mentioned in the Sketch. A first check gives the indication that this may be possible in the Bernoulli example; have to check it. May collide with loops. Is there a hint anywhere else? Or did I not see it in the Sketch? – Rainer
Here's the central issue. The store needs a vast number of parts, so Babbage wanted each column to be as simple as possible. When a number is given off (read out) there has to be a zero stop, to prevent any possibility that the wheel could overshoot past zero. That same zero stop would also prevent a wheel passing beyond 9 when moving in the other direction. In the storage columns in de2 Babbage had to arrange for the zero stop to be lifted out of the way when a number is being added into the column. So in the AE, an „add without carry“ would still require a mechanism to remove the zero stop. I don't think there was such an arrangement (though there may have been in some particular version), so any attempt to store to a non zero location would result in a jam (or worse physical damage). == Tim