For graphics, we want a way to decompress data directly into VRAM using near to zero extra RAM space.
The common ways to compress data are Run Length Encoding, Huffman and Dictionary.
Run Length Encoding (RLE) is the fastest one to encode and decode and can give a decent compression ratio.
Huffman is basicaly an optimization by encoding with a small number of bits what occurs the most. Its decompression time is usually a bit longer than for other compression methods. Not a big deal normaly since it's during the initialiation of the graphics for a title screen or a grame screen.
Dictionary compression is normaly the best one, but its main problem is usualy the need for extra memory space to create the dictionary while decompressing data which isn't the way to go for ColecoVision games because of the limited RAM space.
I created my own data compression long ago which is basicaly an improved encoded RLE compression by using a fixed huffman to encode data. I called it DAN0 and I'm quite proud of myself for saving even more ROM space than with the RLE method I was using for years.
Then I was curious to see the other data compressions and I saw that there are many many of them, some can decompress data directly into VRAM, and some of them are just simply better than the others.
To help comparing the different data compressions out there, I decided to use a bitmap screen 256x192 with just enough complexity in it to see a difference in size for the different results of compression.
LET'S COMPARE SOME OF THE DATA COMPRESSION WE MIGHT USE FOR TITLE SCREENS
From my ColecoVision Strip Poker game project : strippokertitlescreen.zip 3.62KB 340 downloads
- RAW (no compression) : 12288 bytes
- RLE : 4528
- DAN0 : 4143
- Pucrunch : 4000
- BitBuster or BitBuster Extreme : 3595
- PLETTER : 3557
- aPLib : 3543
- MegaLZ : 3524
- Exomizer v2 : 3337
Because the end result depends mostly on the original data, we can't say that Exomizer is the best, sometimes aPLib is better than Exomizer, it varies. But a few things are constant like DAN0 is always better than RLE, and Pletter is always better than BitBuster.
Side note : SMS homebrew scene is very interesting for ColecoVision homebrewers because it imply Z80 assembly and the port number for VRAM is the same. Which makes links like this one from Maxim quite interesting.
Feel free to comment, ask questions, and do your own tests with other data compression programs