Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A possible explanation for ORing the 704 index registers

36 views
Skip to first unread message

Thomas Koenig

unread,
Apr 18, 2021, 5:16:22 PM4/18/21
to
We have been wondering on this newsgroup what the reason for ORing
the index registers on the 704 may have been.

The explanation may be quite simple: The 704 was built on vacuum
tube technology. 0 and 1 were signalled on as electricity flowing
or not flowing.

If you put together the output of several of these tubes, the result
would be an implicit OR, hence the (to us) mysterious decision
to OR the contents of the index registers if more than one was
selected. That choice was then simply documented as a feature.
Later, with the transistorized 7094, they put a multiplexer there.

Does this sound plausible? (And do I have the electronics right?)

John Levine

unread,
Apr 18, 2021, 6:28:58 PM4/18/21
to
According to Thomas Koenig <tko...@netcologne.de>:
>We have been wondering on this newsgroup what the reason for ORing
>the index registers on the 704 may have been. ...
>
>If you put together the output of several of these tubes, the result
>would be an implicit OR, ...

>Does this sound plausible? (And do I have the electronics right?)

Sure. That's what I always assumed was the reason, with the question being
whether they did it deliberately, or it just turned out that way and they later
documented it. There's also the question of whether anyone actually used it
since or'ing numbers and then subtracting them is pretty obscure.

The more mysterious question is why it subtracted the index rather than adding,
and why the subtraction was twos's complement when the rest of the machine was
sign-magnitude. Once they'd decided to subtract, two's comp makes sense as a
way to save a few expensive logic gates.

--
Regards,
John Levine, jo...@taugh.com, Primary Perpetrator of "The Internet for Dummies",
Please consider the environment before reading this e-mail. https://jl.ly

Quadibloc

unread,
Apr 18, 2021, 7:27:52 PM4/18/21
to
On Sunday, April 18, 2021 at 4:28:58 PM UTC-6, John Levine wrote:

> The more mysterious question is why it subtracted the index rather than adding,

Given that the index registers were loaded by a clear and subtract or load complement
instruction, if it hadn't been for the OR, they wouldn't have had to document that the
index registers were subtracted! That is, they could have pretended load complement
was load, and then that subtracting the complement was adding the original value.

Under some conditions, subtraction makes sense. To illustrate this with addition: load
-5 into the index, and increment for each iteration, then you can test to end the loop with
a simple 'branch on not zero', without having to compare to the loop count.

Your indexed displacements just have to be offset by the length of the array...

LDA ARRAY+5,X

sort of thing.

John Savard

John Levine

unread,
Apr 18, 2021, 8:37:36 PM4/18/21
to
It appears that Quadibloc <jsa...@ecn.ab.ca> said:
>On Sunday, April 18, 2021 at 4:28:58 PM UTC-6, John Levine wrote:
>
>> The more mysterious question is why it subtracted the index rather than adding,
>
>Given that the index registers were loaded by a clear and subtract or load complement
>instruction, if it hadn't been for the OR, they wouldn't have had to document that the
>index registers were subtracted! That is, they could have pretended load complement
>was load, and then that subtracting the complement was adding the original value.

Well, the console lights would have given it away. On the 704 PAX and PDX loaded the
index registers directly, you had do do your own negating. I think the negating versions
were added later.

>Under some conditions, subtraction makes sense. To illustrate this with addition: load
>-5 into the index, and increment for each iteration, then you can test to end the loop with
>a simple 'branch on not zero', without having to compare to the loop count.

Whatever the rationale was, it doesn't seem to have been very
persuasive since the 704 series was as far as I know the first and
last use of subtracted index registers. The decimal 7070 used
locations 0001 to 0099 as index registers which were added. The
extremely complicated 7030 (STRETCH) had 15 index registers, added in
various complicated ways. S/360 had (still has, as zSeries) binary
double indexing with base and displacement registers.

Robert Netzlof

unread,
Apr 19, 2021, 12:11:07 PM4/19/21
to
On Sunday, April 18, 2021 at 8:37:36 PM UTC-4, John Levine wrote:

> S/360 had (still has, as zSeries) binary
> double indexing with base and displacement registers.

I suspect you meant to write "base and index registers". Displacement is recorded in the instruction (12 bits in the original, now there are (I think) 20 bit displacements in some newer instructions).

Peter Flass

unread,
Apr 19, 2021, 2:17:10 PM4/19/21
to
Quadibloc <jsa...@ecn.ab.ca> wrote:
> On Sunday, April 18, 2021 at 4:28:58 PM UTC-6, John Levine wrote:
>
>> The more mysterious question is why it subtracted the index rather than adding,
>
> Given that the index registers were loaded by a clear and subtract or load complement
> instruction, if it hadn't been for the OR, they wouldn't have had to document that the
> index registers were subtracted! That is, they could have pretended load complement
> was load, and then that subtracting the complement was adding the original value.
>
> Under some conditions, subtraction makes sense. To illustrate this with addition: load
> -5 into the index, and increment for each iteration, then you can test to end the loop with
> a simple 'branch on not zero', without having to compare to the loop count.

Of course you could also count down from +5, to the same effect. Sometimes
a negative index roes make sense, but not than often.

>
> Your indexed displacements just have to be offset by the length of the array...
>
> LDA ARRAY+5,X
>
> sort of thing.
>
> John Savard
>



--
Pete
0 new messages