Arcade Games: Source Code Collection

Defender Arcade Game Logo

Not long after getting my first PC in 1994, I started to explore emulators. I don’t remember exactly which was the first, maybe it was NES or SNES, but before the 1990’s was over I’d amassed quite a large collection of emulators. These days I rarely play a game that wasn’t released in the 20th century!

I was always intrigued how these old games were made. Almost all were written in Assembly language and over the years I collected together a list of links to dissasemblies for various games. Some are long gone, some moved to different URLs, and others unfortunately completely vanished from the web.

Although there are some efforts to gather video game source code/disassemblies in one place, such as the Video Game Preservation project, it’s still difficult and time consuming to find many of these disassembly projects.

Rather than let my own list rot away on my hard drive, I’m sharing it here for anyone else who is interested in this kind of thing.

Reverse engineering ZX Spectrum (Z80) games

The home computer was born in the early 1980’s and in England this came in the shape of the ZX Spectrum. Along with it came the birth of the British video game industry. Although I had a ZX81 the year before, it was the ZX Spectrum I received as an xmas gift in 1983 that got me hooked on games, in particular the classic Manic Miner; a simple, addictive, and deceptively difficult platformer.

Miner Willy meets the Kong Beast

A year and a half ago I found the Skoolkit disassembly toolkit and one of the examples was the disassembled source code for Manic Miner. As I’d recently started learning to program in C, I thought it’d be a great learning experience to port this classic Z80 game to the C language. After some months I had a working version of Manic Miner written in C and using SDL2.

Porting Manic Miner was a lot of fun and it’d given me a greater understanding of how these early assembly games were written. It had also piqued my interest for how these old Z80 games are disassembled so I decided to give it a go myself.

There are many speccy games to choose from such as Chuckie Egg or the classic Knight Lore, but for this article I decided to take a look at Jetpac developed by Ultimate Play the Game and released in 1983.

game screens

TimeWarrior 1.0.0 - A golang time tracker

After barely programming in Go these past two years I really wanted to get back into using the language, and figured a good starter project would be to port my Ruby time tracker to Go. So a few weeks back I started rewriting that old CLI application in Go, and have now released TimeWarrior 1.1.0 on Github.

TimeWarrior is a CLI based time tracking application used to record timeslips for your freelance and personal projects. Timeslips for a project are stored in their own project data files, with each timeslip saved as a valid JSON string.

Project and Task names are given as CamelCase; separated by a period. You would start a new timeslip like this:

$ tw s MyProject.SomeTask

You can pause and resume a timeslip at any time (the p and r shortcuts are available), and once work on a task is complete, you can mark it as done:

$ tw d "Some nice description of the work"

It’s also possible to adjust the time you’ve currently worked on a pending timeslip with the adjust command:

$ tw adjust 10m

I recommend you visit the Github repository which has full installation and usage instructions.

At the moment you will need to build the executable yourself, but hopefully I’ll have ready-made downloads for Windows and macOS soon, once I’ve run some tests on a Windows machine!

Please note that there’s currently no reporting functionality. I have a simple old script for my own needs, which I’ll eventually look into adding to the app.

If you’re impatient and you’d like to implement a report command yourself, please feel free to submit a PR!