I’m about halfway through Oregon State University’s (Go Beavers!) post-bacc program for computer science, but feel like I’ve just entered the belly of the beast. On the docket for the summer is CS 271 – Computer Architecture and Assembly Language; a fine relaxing course to take in the months before and during my wedding, right? Not so much.
The material is dense as we learn to program how to move memory around on a computer and perform basic actions on the contents of said memory. The class is focused on the IA-32 – a 32-bit version of the x86 instruction set architecture found in early IBM workstations and personal computers, and then later in embedded systems for phones, aerospace tech, and electronic musical instruments. I’m only a few weeks in, but already it’s painfully obvious to me that assembly is not like any other language I’ve used.
There is clearly a steep learning curve and I’m at the point where that curve seems daunting, but I’m confident there will come a point in time where the syntax and concepts click. Now is not that time, but the beginning never is. In these moments, I tend to search for papers, blog posts, and Youtube videos that help motivate me or explain the concepts from a different angle.
In a late night search, I stumbled across the following set of Computerphile interviews with Matt Phillips, a video game programmer from the United Kingdom (Manchester, to be exact), who is working on building a SEGA Genesis/Mega Drive game (Tanglewood) in assembly:
I would strongly suggest watching these videos in this order as they lead very well from one to the next and you can marvel at the effort it takes to string together a game in such a low-level language.
It was especially interesting to see how the language on the boards Matt is working with differed from what I’m currently learning. It’s one thing to hear about how machine-specific assembly is and quite another to see the different syntax, memory registers, and peripherals throughout the videos.
Check out the game trailer here: