Wherever I May Roam

Anywhere I may roam
Where I lay my head is home

Carved upon my stone
My body lie, but still I roam…

Thus Metallica found their new home, only for a while, on a C64. Not satisfied with a lack of sound in my last C64 release, particularly because I have a strong affection to the SID tunes, I wanted to explore it next.

I really wanted to explore the land of C64 intros that fascinated me in my youth. Again, I wanted something easy and quick to produce. I settled with a simple logo with a scroller bellow it, as you can see in the screenshot above, and a nice chip tune. Since the sound was the motivation of this release, the theme revolves around Metallica, one of my favourite musicians.

I have used a beautiful SID arrangement of Nothing Else Matters by Iron Cat (Alain Hertenstein) that you can listen to in the browser thanks to jsSID by the talented Hermit (Mihaly Horvath).

You can download the program and its source code here. You need a C64 or an emulator to run it. Kick Assembler is required to assemble the sources. I really can’t express enough how much I like this assembler. I’ve used many (cross)assemblers for various systems before, and it is by far the most expressive and feature rich. Usually, you need all kinds of converters for various types of assets that you would like to include in the code and a high-level programming language to create various lookup tables, unless you are willing to type them by hand. Kick Assembler is self-sufficient, what I like the most is to import a PNG image and properly lay out multicolour pixels for a video memory that is differently designed than on your modern PC.

There are only 200 lines of the source code, which is very little by assembly standards. The screen is split into a multicoloured bitmap mode at the top and a mono-coloured bitmap mode at the bottom. I’ve tried to use a mono-coloured character mode at the bottom but due to my inexperience couldn’t do it right. The scroller is thus less performant but good enough in this case. I was again furious by the lack of 16-bit arithmetic and resorted to a self-modifying code, which is probably how MOS 6510 wizards do things but is a big turn off for me.