Electronics, coding and hacking. And ADD.

Another C64FC run


At last another batch of PCBs have arrived, and this time they're yellow. Not quite the lemon-ish tint I expected, but I suppose the shade is a tad retro and may complement the C64 well. I have PCBs and parts for 10 boards in total, four of them have been reserved already. This means I have 6 left - interested? Read on.

This will probably be the last run I do on the C64FC boards.

Price? I guess 25 euros per board is as cheap as it gets. There's no markup for me, and most parts have been sourced from China's shadiest back alleys. If you would rather have a blank PCB and get the parts and do the soldering yourself, you can have one for 3 euros a piece. Shipping not included.

Be warned that the current software only runs on Mac OS X and Linux. This means that if you are a Windows user you'll have to be creative.

If you're interested, let me know in the comments and we will get in touch.

EDIT: SOLD OUT. That went faster than expected. Those of you who have expressed interest will be notified shortly. To protect your privacy, the comments left here will not be visible.

Let's go radio


In late November 2016 I became a licensed amateur radio operator. The reason I got the license was to learn more about the black magic behind radios; antennas, radio waves, frequencies, bandwidths. How to transmit, how to receive, what to do and not. Being able to play around on the air, legally, is a huge bonus. I've learned a metric tonne about stuff I hardly knew anything about.

My official callsign is LB5SH (have fun keying that one), but I still don't have much radio equipment to play with, other than a handheld 8W Baofeng GT-3TP. It's good enough to get in touch with the nearby repeaters.

I have ordered a 100W amplifier kit and will soon buy an X-50 Diamond high-gain low-WAF antenna to put on my roof. With a little luck I'll be able to play without the use of repeaters soon. I'm damned to 2m and 70cm bands, since HF is pretty much a no-go due to the physical limitations where I live.

Anyway, why am I telling you this? Well, yesterday I transferred my first homemade data packet on the air. To me that was an adrenaline kick. It didn't do much, it wasn't useful, but it worked, and that was a milestone. An APRS (Automatic Packet Reporting System) packet was generated in software on my PC, sent via the radio, via two local digipeaters and then eventually ended up on This was a test to make sure that my "synthetic" waveforms were A-OK, so I can render something similar on a microcontroller later.

Now to port the code to an AVR or something and see if that works...

GERP 2016


This weekend we, iNSANE, attended GERP 2016, an annual Amiga party held in Skövde, Sweden. We made a small 40k intro for the compo and got 3rd place.

The demo was coded pretty much from scratch in two days. On Friday I wanted to see if I could make the "3D rasters" (which you can see in the 2nd part of the demo), and they turned out so well I had to make a production out of it.

In case you're curious, here's some background info on the parts:

Part 1: Seesaw scroller with zooming checkerboard. The Z rotations and distortions on the scroller is the product of combining tech-tech and sinus scroller, both moving in a seesaw pattern. The zooming checkerboard is animated from a single image, where each line is stretched down the screen. Rasterbars are alternated down the screen in a similar fashion to make the checkerboard pattern.

Part 2: 3D rasters. Maybe there's a simpler ways to make these, I don't know. I started off with a simple 3D vector routine, stripped the X and Y rotations and was left with Z only. The calculations are now so heavily optimized that I cannot read it myself anymore. The values from the Z rotation are then used to select a line from a triangle bitmap, and that's what you see on the screen. The background starfield are sprites, and the logo on top is a 3 bitplane (8 colors) bitmap.

Pouët link:

A 5th audio channel on the Amiga


The Amiga is one of my favorite machines, especially when it comes to the audio. Most of you who had an Amiga back in the day (and maybe still do) remember that it had four eight-bit, stereo-separated sample based audio channels. But what if I told you there's a way to get a fifth audio channel?

Ok, so it's not a real, real audio channel, but I'm talking about something capable of outputting audio: the Amiga composite video port. It's the same socket as the other two audio ports, it outputs terrible video quality and is not in use on most Amigas. So why not put it to work?

The concept is simple: a bright color outputs a high voltage, while a dark color outputs a low. By changing the screen colors at just the right speed, I'm able to generate audio frequencies and use them to play music.

Let's look at it in detail by examining the video signals for a perfectly black screen:

Now, compare this to a white screen:

The first obvious thing you'll notice are the "dips" in the curve every 64µS. These are the horizontal sync signals, one "dip" per line, and they cannot be disabled. Consequentally, they will also produce an audible humming sound, which you will hear in the video further down.

It is clear that we can easily manipulate the video signals by changing the screen graphics, and by carefully changing the graphics at just the right time, we should be able to make video that's.. well, audible.

I wrote a simple assembly program that fills the screen with 285 raster lines from top to bottom. This means that one line represents the voltage level between two horizontal syncs (or "dips" if you like) as seen in the pictures above. All lines are updated 50 frames per second with the next values from the audio sample.

The code automatically adds a DC offset to the AC audio waveform so the sample data varies from 0..255 instead of -127..127. And since the Amiga only has 16 gradients from black to white, we only use the upper 4 bits of the sample. (Using gradients of various colors will not increase the sound quality, look up how colors are encoded in composite video.)

Now, what I needed next was some way of composing music with this fifth audio track. There are existing programs that emulate multiple tracks through software mixing, but I decided to take the short route and use spare 800 commands in Protracker for playing the last track. To keep things simple, I'm dedicating the 5th track just to the drums, so I don't have to worry about adding support for various notes. The command 8xx simply plays the instrument xx at a preset pitch. As you can see above, instrument 1 (801) is the bassdrum, 2 (802) is the snare, and 6 (806) is the hi-hat. The Protracker replay routine was modified to support these "video samples."

Just like the other audio ports, this one needs to be amplified to be heard. I connected a set of active PC speakers via this adapter cable. Although I built this one myself, similar cables are dirt cheap on eBay, if you want to try this out for yourself.

Take a chill pill, Picard, and listen.

Here's the proof-of-concept demo. The audio is a bit low, but if you listen closely, you can hear that I'm gradually spending all 4 audio channels before introducing the drums.

Solskogen 2016 - Kaimana!


I've had the longest vacation in my lifetime this summer. 4 weeks of nothingness! Well, not exactly - I attended the Solskogen 2016 demoparty, and contributed with a demo called "Kaimana", coded for (and on) an OCS Amiga.

The demo ended up 5th in the Oldschool demo compo. Most of the code was ready before the party, but all linking and transitions was done on-site. The Pouët page for the demo is here.

The name "Kaimaina" is Hawaiian, and means "The power of the ocean", which explains the nautic theme. The demo features effects such as a textured twistraster, RGB plasma tunnel and a cylindrical textured twister. There's a metric shit tonne of assembly code behind it.

If anyone out there are interested in technical details on how it was done, let me know and I'll make a post on it.

Add to Google