A Demoscene Conversion
Tales From The Dork Web #12
Some people make the most amazing computer art, pushing them beyond their limits. These coders and artists use incredible tricks to make computers do the impossible. I’m not one of these people. I met some when I entered my first demoscene competition a couple of weeks ago. This issue is about that and my attempts to do some really foolish things with an old computer.
If you’re reading this online you can get Tales From The Dork Web in your inbox every fortnight. Click the button below to sign up.
The Dork Web has a lot of links. I wrote a guide on how to get the most from it.
This issue’s music is brought to you by legendary tracker hero 4-mat. Turn the volume down a bit, press play and read along. We’re graced with art from the amazing Pixel Vixen, who makes all her art on an Amiga 600. You can (and should) buy her art here.
Only Amiga Makes It Possible
The Commodore Amiga was a computer so far ahead of its time we never knew how far ahead it was till long after it disappeared from the rear view mirror. They’re special machines. They’re close enough to today’s computers for modern tasks, but far enough from them to be very slow at them. I still use my Amiga 4000 nearly every day. Here’s my Workbench watching a webcam, web-browsing, chatting online, listening to music and moving files around all at the same time. Not bad for a 28 year old computer.
I’ve noticed two things over the past few months of daily use:
I’m way more creative on the Amiga than on any other computer.
Everything is more complicated on the Amiga than on modern computers.
I also enjoy watching demos. A demo is a self-contained program producing art, visual effects and sounds or music. As a young kid I cracked ZX spectrum games with a Multiface One. I'd add menus to toggle infinite lives or time, sometimes with crappy flashing animations. As a teenager I wrote intros and demos for compilations in a language called Amos. Sometimes I’d use TRSI demo maker or VideoTracker with badly written drum and bass music tacked on.
I haven’t touched demo making for decades because frankly, I was terrible at it. I enjoy watching them though. The growth rate of modern computing power makes it hard for coders to find boundaries to push. You’ll still find them if you know where to look.
The original 1981 IBM PC could display text and 4 colours at resolutions 1/6th of HD. 8088 Domination made it play full motion colour video. Later on it played a black and white music video at 640x200 resolution. You can watch it above from 2:56.
This Bad Apple video might not look special but it is. It’s special because this should not be possible on this machine. IBM PCs of this era do not work this way, or rather they didn’t until 2014. Since then Bad Apple has been the standard way to show full motion video on platforms that shouldn’t be able to play it.
Fenarinasa made an amazing Atari ST Bad Apple port complete with a making of video above. The Atari ST was the Amiga's sworn enemy back in the day, so I wondered what Amiga versions existed. Unlike the ST, the Amiga excelled at animation. On YouTube I found half-finished and unreleased versions of Bad Apple. It appeared there was no full Amiga Bad Apple release.
Full motion video was possible even on 1985's Amiga 1000. By the late 80s the Amiga was used in TV and movie studios for weather reports, titles and effects. Movies like Jurassic Park and Casper the friendly ghost used Amigas early in production. So did early episodes of sci-fi drama Babylon 5.
The plan was simple. I’d make a 320x240 version of the Bad Apple video in 16 shades of grey at 30 frames per second. I’d add 8-bit 2 channel audio at 22050hz. I thought this pushed the Amiga’s boundaries, but was still possible. I was completely wrong about this, but went ahead anyway. With the Amiga and Atari ST covered, the only major classic 68k platform without a native Bad Apple port is the 68k Apple Mac.
In light of this I called the animation “U mad, Apple?” I wanted to use Amiga native formats where possible. Deluxe Paint’s Anim format should’ve worked fine. After all, if it was good enough for Junior Senior’s Move Your Feet it’s good enough for me.
I downloaded the original video and got to work. My first attempt used AGAConv to create a CDXL video to be played with AGABlaster. It worked, but it was 24fps, it used 256 colours instead of 16 shades of grey and it was 230Mb in size. That might not sound much to you, but to an Amiga, that’s bigly.
I dumped 6572 individual frames to image files with a Raspberry Pi. Then I used ham_convert to produce Amiga-compatible IFF ILBM files. I combined these into a Deluxe Paint animation and tried different playback tools for playback. Nothing worked. I burned through movie players before settling on AnimFX. For months, I had problems with crashes and corrupt animations. It could just about play, but stability issues forced me to rely on other computers.
With stability issues I put the animation to one side. One day I found an expansion board’s malfunctioning memory and disabled it. Suddenly the Amiga 4000 was rock solid, so I picked up the project again. I managed to get a working version mostly made on Amiga, but it wasn’t perfect and it was already mid-June.
Novaparty is the UK Demo Scene’s biggest party. It’s normally held in the otherwise sleepy town of Budleigh Salterton in Devon. COVID-19 forced this year's event online. Pixelvixen announced she was entering a Neon Genesis Evangelion pic into a Novaparty competition. If she was brave enough to enter a pic, it was time to get off my butt and enter “U mad, Apple?”
At the last minute I spotted one requirement was a video capture. My capture system wasn’t quite fully functioning and the results weren’t great. I missed the deadline by about 40 minutes. Thankfully the ace Novaparty guys accepted my late submission.
I went to the Twitch stream and saw The Formula playing a DJ set with two Amiga 1200s. It’s a surreal thing to see if you’ve never seen it before, but it was expertly done.
As the party went on, I noticed everyone was incredibly inclusive, supportive and upbeat. There were tons of categories to enter, not all technical. It was clear Art, photography and music were just as important as coding chops.
There were some amazing entries including Sofaworld’s 3D virtual Budleigh with added golf buggy racing. I also loved Bitshifters’ Evil Influences, above. As the party went on lots of amazing demos were shown. Eventually the wild category came up and my animation played. Some liked it, some didn’t. Some rightly pointed out sound and capture issues. The next day the results came in. I came 5th out of 6, but was only 2 points away from 4th. For a first timer I thought that was an acceptable result.
Pixelvixen’s amazing Tokyo-3 Night Drive graphic came first in her category. I’m not surprised given how much effort went into it. Given the problems I had with production and capture I was happy with 5th place for a first time compo entry. I still wanted to redo the animation as PixelVixen did and as I should’ve done all along: on an Amiga from start to finish.
Building Bad Apple On An Amiga
If you’ve ever edited video on a modern Mac or PC you’re probably used to graphical non-linear editing. All this happened way after the Amiga’s prime. Where we’re going, we don’t need GUIs. I’m fortunate enough to have one of the most turbo-charged Amigas money could buy. That means it has less raw CPU power than modern calculators at only several thousand times the cost. My plan was straightforward:
Redump and resize all 6572 frames from the original .mp4 file
Reduce the number of colours used to 16 shades of grey, cleaning up any noise
Convert the images to a more amiga-friendly format
Convert the images into an Amiga anim format, then optimize
Add the sound and make sure it synchronizes with the video
I dumped frames with ffmpeg, upping the image size to 320x256 because masochism. This took a day to complete but only needed to be done once. To convert the files to a native Amiga format and to get them down to 16 shades of grey, I used png2ilbm.
I converted the audio to a 22.05Khz 8-bit PCM wav file using ffmpeg, then to the Amiga compatible 8SVX format with sox. I mixed the images into an animation using Animconvert and used Moloch’s Fantasia to add sound. The sound was still atrocious. As the animation played, it looks like the sound skipped because the framerate was too high. In actual fact it I forgot to compensate for a Paula sound chip quirk. I found some detail on ways the sound chip can make things sound terrible here.
The clicks subsided once I switched from 22050hz to 22030hz. I remuxed the sound into the Animation and played again, and it was dreadful. After a hard reset I gave it another try and it worked flawlessly. You can watch the video above from a real Amiga 4000. The little orange dot in the bottom right is my mouse pointer.
I thought this was all going to be easy. It turns out that running an Animation on Amiga OS 3.9 with 22khz stereo sound and the Operating System still running underneath comes with lots of overheads. It looks way better on a real Amiga as my capture setup doesn’t do it justice. I’ve written up a tutorial with all the things you need to make your own version (of any animation) on my Github. The anim file is there too if you have your own Amiga or an emulator to try it with.
I went to the EAB forums to discuss the project. A few days later Solo Kazuki posted a link to a version someone else had already done… Oh well.
Demos I Hope You’ll Love As Much As I Do
Booze Designs’ Uncensored has some of the best Commodore 64 music I’ve heard. I only got into the C64 in the past few years. It’s incredible to see just what Booze Designs do. There’s a reason this is my ringtone, the music is brilliant.
You might think demos are all bleepy-bloopy electronica but that’s not true. I mean, sometimes it is but not always. One of my favourite demos is Digital Murder’s Just a touch of funk, featuring LA Connection’s 1982 classic Shake It. The graphics look basic by modern standards, but for 2000 it was a groovy demo with graphics and soul.
The Black Lotus are a group firmly in the New School of demo coding. Their slick, polished productions are amazing to watch, but often need souped-up Amigas. What makes Eon stand out is that the whole thing fits on two double density floppy disks and… runs on an Amiga 500. Everything from the graphics to h0ffman’s soundtrack screams “this is not possible”. Yet somehow it is.
FR-041: Debris is an incredible Windows demo from Farbrausch in 2007. Even today it holds up fairly well graphically, but that’s not what sets this apart. What sets it apart is that everything you see in this demo comes from a single executable 177kb(!) in size.
The last demo I want to show you isn’t technically special but it’s massively iconic. Jesus On E’s is just a hardcore rave compilation, but it was played in bedrooms (and at raves) up and down the country for years, if not longer.
Things You Might’ve Missed
The Atlantic questions the state and value of physical university education in today’s virus-affected world. Surjan Singh questions the maths he used to derive his car’s weight from tire pressure alone.
If you’re curious how OSes boot, Wesley Mouedine Assaby of the OpenBSD Jumpstart Page made this infographic on how the OpenBSD boot process works. Wireguard is now integrated into OpenBSD. Here’s a handy guide.
Happy Little Diodes is reverse engineering old Joystick interfaces, while EEVBlog tears down an Ultrasound machine. Lumír Vaněk wrote up his experiences with the RC2014 home-build CP/M computer. Joey Castillo is building an Open EBook Reader.
I’ve signed up for Essex Ham’s Foundation Amateur Radio course. The course starts on the 5th.
The awesome sci-hub has been kicked off Paypal and now takes donations in magical Internet money. Love it or hate it, nobody can kick you off Bitcoin. Josiah Zayner is live-streaming his attempts to build a DIY COVID-19 vaccine. I’m all for transhumanism but this feels a little reckless. Speaking of Streaming, those Stanford pirates are streaming US TV stations for free.
We’re no longer using the Amiga watches as home timers but my 2020 T-Watches arrived. I’ve updated the code to work with the new 2020 model, thanks to Stefan Murawski’s pull request. You’ll need to install an earlier T-Watch library as TTGO’s new library release updated LVGL and breaks the code. I’ll look into it this weekend.
Paprika are an amazing Balkan band I saw live a few years ago. They’re incredibly talented musicians, but their frenetic pace may mean they burn through instruments quickly. Try it, especially if you’ve never heard Balkan music before.
So many of us are scared to try new things publicly. We stop before we even start. We fear judgement we shouldn’t care about from people we don’t even know. I say screw fear. I came second-to-last in my first ever demo party competition and loved every moment. I’ll be back next year with something better and if they don’t like it they can ban me. If fear is holding you back from something creative, do it anyway.
I’ll sign off with a quote from the Rumi, who taught me it’s ok to sing like the birds and not worry about what others say:
“You are not a drop in the ocean. You are the entire ocean, in a drop.”
I hope you’ve enjoyed this issue enough to share it with someone who might like it too. If you haven’t subscribed, now’s the time to do it, below. I’ll be back in two weeks with more Tales From The Dork Web.