RetroChallenge 2016/10: Programming a 60 fps video game for early 1960s hardware.
After all the software archeology on Spacewar! (see below) I was keen to try some programming for the DEC PDP-1 of my own. What about doing my own game? After all, I knew my way pretty well around the PDP-1. So I picked the PDP-1 for the second edition of RetroChallenge 2016 — and managed to write a classic video game running on early 1960s hardware at 60 frames per second!
(No April Fool’s Day Hoax!)
Admittedly, I picked a game, which I knew would fit well the constraints of this particular machine, and I was standing on the shoulders of giants who did Spacewar!, like Steve Russell, Dan Edwards and Peter Samson. More so, the game, I picked, was heavily inspired by Spacewar!, which originated on the PDP-1, so it wasn’t much of a surprise that it should fairly conform to the capabilities of that particular machine. So, closing a never existing circle by a full 360° turn and a somewhat ironic twist in computer history, I ported the very first coin operated video game back to the computer, which inspired it in the first place. Ironically also, because “Computer Space”, despite its cheerful name, doesn’t feature a computer at all, but is rather a complex pattern generator in 74xx-series TTL logic, which we now had to simulate on hardware, which predated its TTL electronics by a decade. And, as a bonus, there’s now a classic single player shooter for the DEC PDP-1. (Eventually, the program ran on the real machine at the CHM.)
A Software Archeological Approach to the First Video Game.
Over the years, before I started this blog, some rather blog-like formats have accumulated on my website, each dedicated to a certain topic or project. Maybe, as many of us are expected to stay at home on their own, this is also an opportunity to point these series of write-ups out and to include them here as links, over the next few days.
For a beginning, there’s a walk through the code of Spacewar!, which is generally considered the first digital video game. We’ll have a look at every single line of code — no instruction is left behind —, learn about the DEC PDP-1 computer, learn how this game was achieved on this early 1960s machine by some ingenious tricks in software. (There are actually some things to be admired, like early object oriented approaches and a JIT compiler.) We’ll even learn about some of the fundamental intrinsics of digital computing, e.g., how basic operations like multiplications and divisions, or integer square roots were solved on this particular machine. Moreover, we’ll have a look at some of the more arcane versions of the game, including a somewhat first person multiplayer version from 1963. — Already intrigued? Then, have a closer look and follow the link, or, maybe, save it for later…
Software archeology of an early computer animation (1960s) for the DEC PDP-1
Snowflake (compare the post below) is a small graphics program written for DEC PDP-1 somewhen in the early to mid 1960s. In essence, Snowflake is a kaleidoscopic program, mapping a list of moving points multiple times onto the screen in a starlike manner. It may be the first of these programs, at least, it’s an early specimen of the species.
In order to learn how it does its trick, we engage in a bit of serious software archeology. All the fun is provided: PDP-1 assembler code, intricacies of display instructions, disassemblies, we even provide a little hack of our own to demonstrate the algorithm (which happens to be much like an once original form and isn’t without a beauty of its own). However, strap yourself for a lengthy read…
It may be just the right season to remind of one of the first computer animations, “Snowflake” written in the 1960s for the DEC PDP-1. Despite various research efforts, the author of this amazing little program remains still unknown, which is quite a bity, since s/he deserves to be rembered along with the program.
Recently, I returned my interest to Spacewar!, the first digital video game, particularly to differences between early versions, like Spacewar 2B, and the better known, later versions, like 3.1 and thereafter. One of these differences, particularly of interest here, is in the random number generator, implemented by a macro named "random" (what else?).