Dithering Revisited

Achieving 24-bit colour on a 15-bit device – 2021-12-31

[I found this unfinished post in a dusty corner of my drafts folder, and decided that tonight was the night to finish it!]

While I’m sitting through the all-too-familiar wait while Quartus builds a core, I wanted to write a few words about dithering and how I approached the problem of doing 24-bit colour video output on a platform which has only 15 bits of colour resolution on its VGA port.

The video DAC on the Turbo Chameleon 64 has just 5 bits per colour gun which means we can output 32 different levels each of red, green and blue for a total range of 32,768 colours. This is fine for the ECS Minimig core, since the original Amiga has only 4 bits per gun, for a total of 4,096 colours – but the AGA chipset doubles this colour depth to 8 bits per gun, full 24-bit output – so some compromises will be needed.

Continue reading

What You Wanted, What You Got…

Sigma Delta without Math – Part 2 – 2021-12-04

Last time around I talked about strategies for halftoning graphics, and made the key point that “noise” and “objectionable noise” are not the same thing.

I haven’t yet mentioned, though, the class of dither patterns which has been used most commonly since the advent of the desktop printer – namely Error Diffusion.

Continue reading

Gripe of the day!


So I’m still, in between tinkering with FPGAs, trying to settle upon a Linux distro for desktop use. I still keep coming back to Mint Mate edition despite the annoyances I’ve found with the latest version, and having installed both an SSD and some extra RAM in the machine I’m about to migrate to, I figured I’d better run some tests. The Ubuntu (and thus Mint) live install contains Memtest86+ so I booted from USB, selected the test and watched the machine lock up half way through the very first test.

Odd, since the machine actually runs just fine…

It turns out the version of Memtest86+ in the current Ubuntu LTS is completely and horribly broken.

The solution to my problem was to install memtest86+ using apt, then remove it again. The removal doesn’t remove the meta files, so provided there’s an image of the correct name in /boot it remains in the grub menu. Therefore, one can download a non-broken binary, copy it to /boot, run grub-update and *now* the RAM test actually works.

One side-effect, however, is that the grub setup installed by the USB live system when installing Linux is somewhat different from what you get when you subsequently run grub-update from the installed-and-running system – I had to edit some config files to get the menu back..

Porting the VIC20 core


I’ve been porting the VIC20 core from MiST to TC64 recently, and since various people have asked me about the process involved in porting cores I thought I’d document the process this time.

I’ve been recording a series of screencast videos which I’ve published on Patreon, but I may as well include them here, too.

They’re not tutorials as such (since I make no claim that what I’m doing is the best or most correct way!) – they’re more of a video diary – but maybe someone will find them interesting…

I will add to the list of links as new parts are released:

Stopping the Bit Rot – Redux


Out of curiosity I recently tried to build the toolchain for ZPU – and as I rather suspected would happen, it has succumbed to the Half Life of Software, and no longer builds cleanly on up-to-date systems.

[smug mode]In the meantime, I recently succeeded in building the 832 toolchain (832a, 832l, 832d and the 832 VBCC backend) for Amiga, using the Amiga version of VBCC and the Minimig core![/smug mode]

I still have a definite soft spot for ZPU, though.

Continue reading

DeMiSTifying the Atari ST core


The DeMiSTify framework has now proved useful in porting a number of retro console and computer cores from the MiST board to the Turbo Chameleon 64, and others have found it useful in porting cores to the DECA board, which I mentioned in my previous post.

However, the jewel in the MiST crown has always been the Atari ST cores: it has two – the original MiST core which was developed side-by-side with the board sharing its name – and also the MiSTery core, an evolution of the project which features a cycle-exact implementation of the CPU and also most of the chipset.

Continue reading

Snake Charming with USB Audio…


A few months ago I bought a couple of the ridiculously cheap DECA boards from Arrow – they’re sadly sold out now – but $37 bought you a MAX10 FPGA with 50,000 LEs, some DDR3 RAM, i2s audio, an HDMI port, USB and network ports, and a couple of GPIO headers. (It also bought you all the blue LEDs – I highly recommend not looking directly at the board when you power it up for the first time!)

I’m not the only one who’s been interested by this board – a bunch of MiST and MiSTer cores have already been ported to a DECA-based reference platform which involves a MiSTer-style SDRAM module, PS/2 keyboard, DB9 joystick and VGA video on the GPIO headers.

There is now an open-source DDR3 memory controller which has DECA as a main supported target.

And there is a project which caught my attention recently, which turns the DECA board into an external USB2 soundcard.

Yes, you read that correctly.

Naturally I wanted to try this out, so I cloned the repo on my own machine. Hmmm… there seems to be lots of Python involved. I’m not familiar with Python, but by now it’s a well-established, mature language with reliable, well-thought-out packaging and dependency management, right?

Continue reading

A Crash Course in SignalTap


A few weeks ago I was helping someone with an FPGA problem, and realised that I take for granted the phenomenally useful tool that is SignalTap. Since the person I was trying to help wasn’t familiar with it, I put together a quick Crash Course video. Initially unlisted, it’s apparently been useful for at least one other person, so I decided to make it public in the hope that others might find it useful too

Maybe I’ll do some more Crash Courses in futureā€¦