James Mackenzie's Blog

James' Blog



Porting Commander Keen to PlayStation Vita

Status In Progress
Goal Bring the DOS classic Commander Keen to PlayStation Vita.

I’ve wanted to explore cross-compilation (i.e. building code on one platform for execution on another) for a while. I’m also passionate about bringing classic retro games to a new audience.

With the advent of h-encore, pretty much any PlayStation Vita can now be unlocked to run homebrew code. There’s also the Vita SDK development framework available to help create working binaries. So the Vita seems like a great target platform.

I’m aiming to bring Commander Keen (in the form of CloneKeen) to the Vita. The source code is C/C++ and uses the multiplatform SDL development library, so should be relatively portable. I’m also looking for improvement opportunities over the orignal release (e.g. level editor, increased resolution).

So far I have the game engine running, but need to add controller support.


Porting Commander Keen to WebAssembly

Status Completed November 2019
Goal Port Commander Keen to WebAssembly, making it playable in the Browser

I’ve wanted to find a creative outlet for my recently-acquired WebAssembly skills. I’m also passionate about bringing classic retro games to a new audience.

I used Emscripten to port Chocolate Keen to WebAssembly. The initial goal was to refactor the entire code base to Emscripten Loops but this proved too much effort. In the end I found a working (but slower) solution using Emterpreter.

I’m happy with the end result. Play Commander Keen in the browser right here, find instructions here and source code on GitHub.

In future, I could refactor towards Emscripten Loops to improve performance and add on-screen controls for mobile devices.


Learning About WebAssembly

Status Completed November 2019
Goal Learn about WebAssembly. Understand how to make C/C++ code run in the Browser. Code some “Hello World” examples and document my findings

I’ve wanted to explore the WebAssembly ecosystem for a while. I learn best by sharing what I learn, so I’ve written up my findings as WebAssembly Lessons:

Ultimate Retrogaming Machine

Status Completed October 2018
Goal Build a cheap, small and light device to retrogame on the big screen

I’m a big fan of retro games, with many fond memories of the 8-bit and 16-bit years. Looking for a way to relive those memories on the big screen.

I selected the Raspberry Pi and RetroPie as the base for my build. After a week of on/off tweaking, I found optimal settings and documented the full setup here. For Phase 2, I configured Moonlight Game Streaming to allow low latency streaming of more demanding titles from my gaming PC.

Overall very pleased with the result, and pleasantly surprised by how well Moonlight Game Streaming works.


Atari ST on the Web

Status Completed June 2018
Goal Connect my venerable Atari ST to the World Wide Web. Browse some sites!

The Atari ST was released in 1985. Is it usable on the modern Web today? How far can I push the experience?

Starting with a NetUSBee Ethernet adapter, I installed TOS drivers and the STinG TCP/IP stack. I also used an ET4000 graphics card to push the resolution to a (somewhat) modern 1024x768 in 256 colours.

With those (and a successful TCP/IP ping) in place, I downloaded and configured Crystal Atari Browser (CAB).

The Web experience is slow and doesn’t support CSS - which rules out a lot of content. However I was able to make older sites work.

In search of a better experience: it might be possible to use a proxy server to strip CSS and shrink images. Or use a text-based browser like Lynx. Browsh also looks interesting. Lots of avenues for future investigation!

Shooting and Sharing VR Photos

Status Completed November 2016
Goal Learn how to shoot, interactively view and share VR photos

Ever seen one of these photos where you can interactively zoom and pan around? They’re known as 360° or VR photos.

More formally, VR photography (Virtual Reality photography) is the art of capturing or creating a complete scene as a single image, as viewed when rotating about a single central position

I want to learn now how to shoot, interactively view and share my own VR photos. Here’s what I found:


Transferring Files Between PC and ST

Status Completed March 2016
Goal Explore the various ways to share files between PC and Atari ST

Can my Atari ST interoperate with modern PCs? What are the best ways to send files back and forth?

I explored several ways to transfer files between PC and Atari ST, including:

I also took a detour into file compression, and learned how to split large files into chunks that can be individually copied using (for example) floppy disks:

Playing Downloaded Games on Real ST Hardware

Status Completed September 2015
Goal Download an Atari ST game image from the web and play it on my real ST

My old ST disks are dead! Can I download replacement disk images from the web and play on my physical ST?

I explored several options, including floppy disk images and hard disk adaptations:

Watch Mobile Content on the Go

Status Completed December 2014
Goal Download video content to my mobile device so I can watch it on the go

Update Dec 2019: YouTube has emerged as the dominant platform for Web video. In future, it makes sense to look at the YouTube API. Can I automatically download every video tagged to the “Watch Later” playlist for offline consumption?

The work commute is a great time to catch up on news, vlogs and other Web videos. But cellphone signal is way too patchy for reliable streaming - especially in the subway.

I explored use of the Pocket API and PlexSync to download and push web videos to my phone:

Ghost Blogging

Status Completed June 2014
Goal Learn how to use the Ghost blogging platform

Update Jun 2018: I now use Jekyll and GitHub Pages as my blogging platform.

I’m interested in Ghost as a crisp, clean, lightweight blogging platform. I took some time to learn about the platform, setup my own developmemt environment and even write my own theme. Findings below.