Hi Al,
Very nice interview. Is there an audio of the entire interview available on the Museum web
site, or Youtube?
Lee Courtney
--- On Tue, 10/21/08, Al Kossow <aek at spies.com> wrote:
From: Al Kossow <aek at spies.com>
Subject: PDP-1 Spacewar! program internals
To: classiccmp at
classiccmp.org
Date: Tuesday, October 21, 2008, 11:00 AM
Here is part of an oral history I recorded with Steve Russel
last
August which discusses how the Spacewar! program works
internally.
Exerpt of an oral history of Steve Russell
August 2008
CHM Reference Number X4970.2008
(C) 2008 Computer History Museum
Russell: Anyway, the PDP-1 arrived, and Marvin Minsky
wrote the tripos
demonstration, generally called the Minskytron,
and there was the famous weekend
where the mob of undergraduates transcribed the
macro assembler from TX-0 to the
PDP-1, because they didn't like FRAP. And
then fairly quickly thereafter, they
wrote DDT and connected up the macro symbols to
DDT. So that was all sort of in
place by the middle of the fall of 1961. And the
combination of the Minskytron and
having DDT with interactive debugging with
symbols was very tempting. I don't
remember the exact order of things, but I'm
pretty sure I started talking up a better
demonstration program than the Minskytron, and
eventually, Alan Kotok went up
to Maynard and collected the sine and cosine
routines from DECUS, presented
them to me, and said, "Okay, here are the
sine and cosine routines; now what's your
excuse?" And I discovered I had run out of
excuses; I had to actually think. And so
I started work and figured out the basic trick
of Spacewar! display which is that you
only need to calculate a unit vector pointing in
the direction of the spaceship. And
you can express everything else the spaceship
does, and the outline of the spaceship
in terms of that unit vector, suitably scaled.
So it's basically a lot of addition in the
usual program upkeep.
Kossow: Do you want to just give an overview, then, of how
Spacewar! actually
works?
Russell: It's one big loop, and the loop is on the
displayable objects. And I called
them displayable objects, although I didn't
know about object orientation or object-
oriented programming at the time.
Kossow: So you have the sun--
Russell: Colliding objects, not displayable objects. The
colliding object is a space
ship, there are two of those. And that has a lot
of extra data with it. It shares the
position and velocity tables with all of the
torpedoes and explosions that are running
around. So there's just one big loop through
the colliding objects, and it looks at all
the higher-numbered colliding objects to see if
there's a collision, using an octagon
because you don't need to calculate the
square root of anything, you can do that by
work on X difference, Y difference, and X+Y
difference--
Kossow: So the bounding box for the collision detection is
an octagon?
Russell: Yes. So it goes through, it sees if this object is
colliding with any higher-
numbered object. If it is, it replaces the
calculation routines. That's another thing
that every colliding object has, is a
calculation routine. It replaces the calculation
routine with the explosion calculation routine.
And then things take care of
themselves. Then, after it's decided whether
it's an explosion or not, it goes off to
the calculation routine. And the calculation
routine updates the position, since all
colliding objects have velocity; and if it's
a spaceship, it worries about reading the
controls and updating the other things about the
spaceship in deciding whether to
launch a torpedo or not. And if a torpedo needs
to be launched, it searches up the
colliding object table for an empty slot,
indicated by having no calculation routine.
It searches up the table for an empty slot, puts
a torpedo calculation routine there,
and the spaceship position plus the suitable
increments, so it won't run into its
torpedo, and of the velocity of the spaceship
plus an increment for the torpedo, and
it goes on. When that the main loop gets done,
you go off and do some star display
and display the sun, and calculate -- and part
of the spaceship calculation is to
calculate the effect of gravity on the
spaceship. Originally, there wasn't any gravity,
and I had an interpreter, which interpreted the
outline description, and Dan
Edwards, sometime in late 1961 or early 1962,
looked at that code and decided if he
could write a special purpose compiler which
would compile precisely the right
code, and proceeded to. And there's one
compiled outline for each spaceship; each
spaceship actually does half of the spaceship
outline and then you twiddle the
vectors and do the other half. That keeps the
display running just as fast as it can.
That gives time to calculate the effect of
gravity on the two spaceships, but not on
the torpedoes. So we decided that they were
photon torpedoes not affected by
gravity.
Kossow: So when the explosion routine starts, it continues
calculating motion, so
the explosion moves?
Russell: Yes. If you see two spaceships collide, if you
watch closely, you will see
that there are two explosions that continue off
in the direction that the two
spaceships were going. There is another number
in the table for all colliding
objects, which is the size. And this is, roughly
speaking, proportional to the amount
of computing it takes to compute that object.
And at the end of the loop, as you go
through the main loop, you accumulate the sizes
also; and so at the end of the loop,
there's fritter away time loop that attempts
to keep the frame rate approximately
constant. It doesn't do a wonderful job;
it's visually adequate, but God help you
when you try to take a movie of it.
Kossow: One of the complaints with all modern kids trying
to play it now is
that it's TOO SLOW.
Russell: Kids who are used to something like Asteroids seem
to think that. But
when we do the demos, we get a number of people
who seem to be still quite
addicted to it with the old, slow version. Now,
that was always a complaint; the
reason that all the parameters got accumulated
in the first page of the listing, which
says you can put that first page of the listing
of the console, and anyone who wanted
to try a different set of parameters could. But
the ones that were compiled in or
assembled in were the ones that I thought were
good. Now it turns out I'm not a
representative arcade game player, and so my
version of the parameters is slower
and gives more opportunity for marksmanship than
the arcade version.
Kossow: Right, that's the whole thing with gravity and
doing the, what's that called,
where you whip around the sun? Does it have a
name, where you whip around the
sun and you shoot?
Russell: The closest name is the "CBS maneuver"
is what happens when two lazy
experts fight each other, which is they both
turn at right angles to the sun, and fire
for 3.5 or 4 seconds, so they're now in
stable orbits, and they know it. And then they
turn at each other and start trying to place
torpedoes where they think the other one
is going to be. And so the trails turn into an
eye around the sun, and CBS used that
as a logo, so it got called the "CBS
maneuver". You can-- one of the spaceships can
go the other way around the sun, so that both
ships meet on the same side of the
sun. But that seems usually to have less chance
of winning. Not much less, but
somewhat less.
Kossow: It's better that you stay on opposite sides,
then?
Russell: Yes.
Kossow: And then at some point, you added hyperspace?
Russell: Yes, and we realized that that was going-- I
don't remember whether we
actually had it. I may have had it for a little
while with no limit, but it became very
clear that someone who didn't understand
could use hyperspace to escape their
proper justice forever, and so we added the
unreliability of hyperfield generators
very quickly. One thing that Asteroids and the
arcade versions, the later arcade
versions of Spacewar! added, which actually was
a big help, especially with their
high acceleration rates, was "training
mode" where space was actually viscous. So
if you got your ship accelerated so that it was
going across the screen so fast you
couldn't understand what was going on, if
you took your hands off, the situation
would gradually become understandable. I
don't think I would have been persuaded
to do that in the original Spacewar! because it
was unrealistic. But it definitely
made it easier to learn.
Kossow: So are there any other favorite anecdotes about
Spacewar!, or just the
spread of Spacewar!?
Russell: Well, the "imitation is the sincerest form
of flattery"-- many people saw
Spacewar! as, some people ask for copies of the
source, and of course we gave them
out because we very briefly considered trying to
sell Spacewar!. We realized the
only possible customer was Digital Equipment,
and we also, on a little reflection,
that they were too cheap to do it. So we gave it
out to anyone who wanted it, and
some people got the listing and thought about
it, and by reading it-- a lot of people
simply saw the game and had a computer that
wasn't the PDP-1 but did have a
display, and implemented Spacewar! their own
way. I suspect most of them figured
out the "basic trick", but I'm not
sure.
Kossow: What "basic trick" were you thinking of?
Russell: That you could do everything based on the
spaceship unit vector. How are
you fixed for the source code for different
implementations of Spacewar!?
Kossow: We have a few. I don't know if we have the
PDP-10 version. We have the
12 version, and I think we have a PDP-7 version.
Russell: I think Bob Saunders wrote the PDP-7 version. I
think one 6 version
simply ran on the PDP-1 simulator. I think there
must have been others, but I don't
know. Something for some history grad student to
pursue. When we were running a
demo for the Yelp event, there was one woman who
had done Spacewar! in turtle
graphics as a high school programming project,
which she wasn't too happy with.
She seemed to like the demo of the original
Spacewar!.
Kossow: So turtle graphics running on a micro or something
like that?
Russell: I didn't quiz her. I didn't have the
opportunity to quiz her further.
Kossow: So she thought this version was better?
Russell: No, she just thought it was nice to see the
original.
Kossow: So she was in her mid-20s?
Russell: 20s or early 30s; probably 20s. The DEC field
service story where the
DEC production people got into the practice of
loading Spacewar! the last thing
before PDP-1 shipped, and field service would
then unpack it, make sure that
nothing horrible had happened, tryed turning on
power, and starting Spacewar!.
And if it worked, they would call the customer
over and say, "See, it works." If it
didn't work, then they'd worry about it.
In the restoration project, we had a little
reflection and we decided that probably if
Spacewar! works, just about everything
works, as far as machine instructions go. It
doesn't guarantee all the I/O gear works,
but it does multiply and divides, and just about
every instruction. So a lot of people
implemented Spacewar! just from knowing that it
existed and having seen it maybe
once.