Phenomenal & Enigmatic, part 1 of 4

#retrocomputing #javascript #demoscene #learning #reverse-engineering

Written by Anders Marzi Tornblad

This is part 1 of the Phenomenal & Enigmatic series.

Twenty-two years ago, the Amiga demo scene was extremely active. The boundaries of the little 16-bit miracle machine were stretched a little bit more for each new release, and a special breed of programmers was created. We loved efficient algorithms, we enjoyed squeezing out as much as possible from every CPU clock cycle, and we really liked showing off to each other.

Back then, I was as decent 68000 assembler programmer, but nowhere near being among the greatest. I knew my way around the Copper and the Blitter, I know how trigonometry and vector mathemetics worked for creating 3D worlds, and I understood that the "shadebobs" effect on the Amiga was nothing more than repeated full-adders using the "Fat Agnus" chip's dedicated bitwise memory block manipulation instruction set.

My favorite demo from 1991 was Enigma by Phenomena, programmed by Olof "Azatoth" Lindroth, with music by the amazing Jimmy "Firefox" Fredriksson and Robert "Tip" Österbergh. The combination of music and direction with some really good programming set a new standard for demos on the Amiga.

First attempt

About four years ago, I started replicating the Enigma demo in C# and Silverlight 2, just as a side-project. I got as far as the opening scene and the "TV Cube" effect, which I was very pleased with! But then I grew tired of the effort, and pt the whole project aside. It just wasn't rewarding enough, but I did re-awaken some of my old "hacking the bare metal" programming skills.

Come 2013

For the last couple of weeks, I have been working from scratch, exploring what is possible using just an HTML5 AUDIO element, a CANVAS element, and a truck-load of JavaScript. Instead of trying to recreate the exact Enigma experience, I "borrowed" the amazing music, and did something similar with the original Enigma demo as an inspiration.

I'll write a bit about each scene of the demo in the following weeks, but for now you're welcome to checkout the code on

You can try this solution at The latest version of the code is always available in the GitHub repository.

Articles in this series: