Inside Spacewar!
A Software Archeological Approach to the First Video Game
This is a loose series of articles on software archeology dedicated to Spacewar!, the eariest known digital video game*.
The code of Spacewar! 3.1 is fully analyzed (parts 1 – 8) and significant parts of versions 2b (distributed over various episodes) and 4.x (parts 6 and 9) are covered as well, but there's still more to come …
The Episodes
- Part 1: The “Expensive Planetarium”
Peter Samson's famous program-in-the-program. - Part 2: To Draw a Star
The story of a few dots on the screen … - Intermission: Digging up the Minskytron Hyperspace
We solve a decades old riddle … - Part 3: Objects!
Covering the main loop and objects in Spacewar! - Part 4: The Outline Compiler
Details on an early example of a JIT-compiler. - Part 5: Maneuvering in Space
On how spaceships are actually handled. - Part 6: Fatal Attraction — Gravity
Including an excursus De Computatione Mechanica
on how a computer actually does binary arithmetic. - Part 7: Shootout at El Cassiopeia
Exploring the pyrotechnics of space warfare,
like torpedoes and explosions. - Part 8: Hyperspace!
The first Nth dimensional means of transportation. - Part 9: Like a WW II Pilot’s Tally
The 4.8 scorer patch and other Spacewar! 4 oddities. - Intermission: Yet Another Patch
Spacewar! 2b SA 5 and the secrets of PDP-1 loaders. - Part 10: Spacewar 4.4 — A Twofold Stand
World's First Attempt at a (Planar) Multiplayer First-Person Shooter Game. - Part 11: The Spacewar 2B Preservation Project
Porting the oldest digital video game to "modern" hardware. - — Stay tuned … —
Resources
External Link:
- “Spacewar! Controllers” by Thomas A. Tilley (Feb. 2015)
Dr Thomas A. Tilley (Payap University) engaged in the recreation of the original control boxes in his Game Controller Hacking class. There's much detail on the original control devices and, to make this even more interesting, Thomas Tilley won Dan Edwards for a talk at his class.
Here's an additional note by Dan Edwards on the subject, providing further detail regarding genuine Spacewar!-controllers (sent to Thomas Tilley): “The picture at http://www.wheels.org/spacewar/creative/spacewar-fig2.jpeg is a fair artists rendition of [the] controller we commonly used, other consoles being the sense switches on the front panel of the computer (which was discouraged because the switches would get worn out) and the right arm panel of a military surplus Bomarc missile control console which featured [a] professing joy stick. That console looked fancy, had nice directional micro switches plus a button on the top of the joystick which was used [to] fire the 'photon torpedoes' in the game. In the end, this console wasn't used much because it was too big and bulky. […] The button [of the original control boxes] used to fire the missiles was a very inexpensive small red push button.”
(Please note that the image at http://iasl.uni-muenchen.de/links/GCA_ill196.png referred to in Dr Tilley's article is not a genuine photo of Spacewar! on the Type 30 CRT Display, but rather a montage using a cropped and rotated portion of a screenshot. Presumably the image appeared first as a title illustration to the TCMR-edition of “Origin of Spacewar”, in The Computer Museum Report, Fall 1983; Marlboro, MA; ISSN 0736-5438. p. 6, where it is attributed to J. M. Graetz.)
Proof of Concept:
▶ JS-Spacewar 3.1, a genuine port of “Spacewar 3.1, 24 Sept 1962,” to JavaScript.
Meant to verify the code analysis and to illustrate the logic in a modern lingua franca
(also providing the final transformation without which no software archeology would be complete).
See the source code here.
Emulation:
▶ Play the original code of Spacewar! running in an in-browser emulation (JS/HTML5).
▶ Play the original code of Spacewar!, alternate presentation / UI
(same as above, but doesn't mimic the PDP-1: more detailed rendering [125%] and other options)
▶ Play the dual-display version Spacewar! 4.4 running in an in-browser emulation (JS/HTML5).
Assembler code sources related to the articles can be found here.
Maybe of help: A reference of the PDP-1 instructions.
Please mind the font controls floating at the upper right corner of the screen.
Select size and style in order to adjust these pages for personal reading comfort.
About this Project
Let's face it, software has become a part of our cultural heritage. And the first interactive demonstration program addressing a non-technical audience by simulating a virtual environment, which happens to be the earliest known digital video game* at the same time, might serve as a prominent example. But how to deal with it?
On the one hand, there is the preservation of the actual experience, like by restoring and maintaining the original hardware as in the Computer History Museum's PDP-1 Restoration Project, or in emulation. While the first one is as close as you can get in terms of the experience conveyed by the software in its time, emulation is opening up this experience to a broader audience, even, if there may be some trade-offs. (The great feat in preserving and making available historical software and documentation in digitized copies accomplished by Al Kossow's bitsavers.org and by archive.org should not go unnoticed in this context.)
On the other hand, there is a rich tradition of textual analysis, focussing on the aspects of its object as a socio-historical production, which may be providing some deeper insight and may be of help in understanding. Probably, this is only going with some kind of preservation of the experience, like in the tandem of actually watching a movie and reading the film analysis. Given, we would support this position, there's always the question what the text would actually be. Is it the experience conveyed by the technical contraption, is it the software, is it the code in its textual appearance, is it the code as moving numbers? Can we even isolate the software, without discussing the platform it is running on?
Some argument has been made that software could only be comprehended by a stepwise procedure, following it in its very motion. This might even be more true for a software written for a platform that is notoriously demanding self modification in code. While there's some to this argument, this is an approach to encounter the source code as a textual object. An object that is static and in potential motion at the same time. While this might be quite a low level approach, it also provides the means to investigate the code as an object of some “solidity” and conveys a chance of appreciating its expressive qualities at the same time. Last but not least, it's probably the only way to come back from this walk-through with some kind of proof of what we would have found inside.
Let's see, where this journey will take us …
*) The term “digital video game” is meant to denote both the first known “interactive visual realtime game for a digital stored-program computer” (seriously, there is no shorter term for this) and its contribution to the more general category of electronic realtime gaming devices (being implemented in software and/or hardware) following since. Moreover, this term is referring not that much to the concrete technical implementation of the hardware driving the display, but more to the relation of the human player(s), the electronic device serving as the platform, the very experience conveyed by the participatory scene exhibited on its screen, and the domain of quick motor reaction and tactical deliberation specific to the genre, as well as to the various implications of this as a cultural entity.
Other definitions:
video game
noun
“a game played by electronically manipulating images produced by a computer program on a television screen or other display screen.”
Oxford Dictionary
“an electronic game in which players control images on a television or computer screen”
Merriam-Webster Dictionary
“electronic game, also called computer game or video game, any interactive game operated by computer circuitry. The machines, or “platforms,” on which electronic games are played include general-purpose shared and personal computers, arcade consoles, video consoles connected to home television sets, handheld game machines, mobile devices such as cellular phones, and server-based networks. The term video game can be used to represent the totality of these formats, or it can refer more specifically only to games played on devices with video displays: television and arcade consoles…”
Encyclopedia Britannica
Vienna, 2014 – 2015
www.masswerk.at