A giant arcade console, 3/4 view up close with a strange barren landscape the background. twilight and overcast. sci-fi digital painting by Simon Stålenhag

In 2021 I entered into the “2021 GitHub Game Off,” a competition to create a game from scratch in one month. In the early 1980’s I’d used BASIC to start a handful of text-based adventure games (which I never finished), but in the decades since I’d never made another game. In the months leading up to the event, I watched dozens of hours of tutorials and videos on creating games using Unity and I learned C#, the primary coding language for Unity, at a deep level. As YouTube will do to a person, I found myself in a rabbit hole on various game histories and styles. One of those diversions led me to building Asteroids in C++, and that path eventually led me to finding the original Assembly source code for Asteroids. To an outsider, going from building neural networks in modern high-level languages to learning how to recreate 1970’s games in their original languages might look like I’m going backwards. In a way, they’re right.

I’m not a traditional computer scientist. I’m a neuroscientist. I graduated with a Neuroscience degree from the University of Texas at Dallas, then dropped out of their Computer Science Master’s program after just one semester and nearly failing a course on C++. Everything I’ve built today started with my dad working overtime at a warehouse to buy the family an IBM PC clone in the early 1980’s. By the time I was eight years old I was teaching myself BASIC by taking apart programs that came with the computer and understanding how loops worked, how to use GOTO, how to print special ASCII characters, how to make the speaker emit beautiful 8-bit melodies, how to take input from the keyboard, and how to make the screen print each letter of a sentence with a slight delay like it might on a teletype machine. I wrote a plugin for Lotus 1-2-3 (it felt magical to add a menu item to their existing menu - although I can’t remember what it did now), and I got second place in my middle school science fair for writing a text editor that let you highlight words. I don’t think this existed yet in WordPerfect - the leading word processor of the day - so I like to tell my kids I invited highlighting. (First place in that competition was won by a guy who taped a small mirror to the back of a hair brush, so you could brush your hair, then turn the mirror around to look at yourself. I’d like to have a chat with those judges today.)

Because I didn’t get that traditional CS education, I’ve always felt like I missed out a little on that golden era. It stung a little more than it might have to others, because my college apartment was just a few miles from the headquarters of iD Software, where Doom and Quake co-creators John Carmack and John Romero would park their Ferraris and build amazing games in those languages I never learned. I would drive by their office, partly wondering what it would be like to drive those Ferraris, but mostly wondering what they were coming up with next. They were just a few years older than me–what could I have done if early on I’d learned the languages like they did?

I didn’t have the raw talent or drive to create those games, but I could’ve learned Assembly. To me, the language looked like cryptic code that only a worthy few could read, and for years I wanted to be one of those worthy few. So, in late 2021 I spent time watching Assembly coding videos and doing basic variations of “Hello, World” before I got tired of the slow progress of learning. Then, in Aug 2022, Carmack made his second appearance on the Lex Fridman podcast. I’m not even sure he mentioned Assembly in that episode, but just hearing him speak for five hours was the latest catalyst that rekindled my desire to learn low-level code. Since then, I’ve jumped back into Assembly, following code tutorials in the excellent book “Programming Boot Sector Games” and learning about hardware and how Carmack and Romero built Doom in Game Engine Black Book: DOOM.

I know with the modern high-level languages we have today, it’s not essential for a coder to learn Assembly. But for me, this journey has been enlightening. I’m by no means an expert, but the code that once looked cryptic is mostly readable to me now. This continuing journey has also sparked new ideas. I want to explore in bare-metal programming with Rust, and I think I’ll write a bootable kernel or a simple OS from scratch soon - just to see if I can. By going backwards for a bit, I’ll be able to go forwards in ways I never considered.

And about that Game Off. The theme for 2021 was “bugs”. In my game, “Disrupt!”, a player introduces bugs (like shipping bugs, code bugs, and a virus) that affect the supply chain to prevent packages from being delivered to houses. It didn’t win the competition, but I learned a new language and published my first game. That’s a win to me.

- @jbnunn

The image for this post was created using Open AI's DALL·E 2. I used the prompt "A giant arcade console, 3/4 view up close with a strange barren landscape the background. Twilight and overcast. Sci-fi digital painting by Simon Stålenhag.".