The trouble is, the CoCo can only officially display 16 colors at a time out of a palette of 64. By using palette switching techniques (setting new palettes every new scan line), we can bring that up to 64 colors on screen (limit 16 colors per scan line) but that still doesn't come close to the PC's 16 million color palette. So, a variety of tricks had to be combined to get even more colors. A long, long time ago, I wrote Twilight Terminal. This program used 3 graphics pages and switched between them rapidly to fool the eye into seeing more colors. To get this to work without causing annoying flicker. Each of the 3 pages was actually drawn using the exact same palette, and the same image - only the dither pattern is shifted by 120 degrees in each image. The result is that each screen is the same color and brightness as the other and when you switch between them, the dither 'blurs' together to become a solid whole. The effect is actually similar to what you see on your TV - If you look closely at a very bright color, you can see a checkerboard pattern around it. Every subsequent video frame, the pattern of dots shifts a bit. If it's done fast enough, you just see a solid color and not the checkerboard pattern. On the TV, it's used as a way of compressing color information to get you more resolution. Well, we can apply it to the CoCo as a way of 'uncompressing' more colors onto the screen at the *same* resolution :)
Unlike Twilight Terminal, which runs in 640x225 resolution (because we wanted maximum
resolution for clear text with the bonus of more colors), HiColor uses 320x200 resolution.
The larger size of the pixels and the greater complexity of the images I wanted to
display made me opt to only switch between two screens instead of 3. (Larger pixels would
mean more flicker, but using two screens would reduce the flicker, so it would still appear
to be flicker free.)
Okay, so what does this all get you? If we use all 64 palettes and mix the colors together in various cominations, you can increase the visible colors from 4 levels of R,G and B (64 colors) to 10 levels of R,G and B (1000 colors). [UPDATE] The latest version of HiColor also allows the option of using 4 screen switching. This can do more complicated mixing and go up to 19 levels of R,G & B (6859 simultaneous colors) in it's highest mode! This mode takes some very serious CPU time to do the calculations, so there is also a quicker 4 screen mode that gives 13 grey levels (2197 colors) in a quarter of the time.
HiColor has a simple menu, which allows you to load 256 color 320x200 BMP files or 4096 color Rascan/Digiscan IMG files, view the image and then save it back to disk as a *quick* loading 'HiColor' file (From BASIC, just type LOADM"filename":EXEC to view it!). The menu also lets you set the color mixing, page switching and palette switching parameters so you can see what the image would look like in various 'modes'. You can even load the BMP files with all the tricks turned off - and you'll see it converted to 'ordinary' 320x200 16 colors! It doesn't look as good, but it's a good way to see what a difference each seperate part of the 'process' makes on image quality.
Click here to see a short video clip of HiColor converting/displaying an image
|HICOLOR.BAS||HiColor basic loader (untokenized BASIC ASCII)|
|HICOLOR.BAS||HiColor basic loader (tokenized BASIC BINARY)|
|HICOLOR.BIN||HiColor ML program (BINARY executable)|
|HICOLOR.ZIP||HICOLOR.DSK virtual disk image which includes HiColor and the 6809 assembly source code too! (zip file)|
|MIRRI3.BMP||Sample BMP file of a cat (BINARY DATA)|
|VALLEY.BMP||Sample BMP file (BINARY DATA)|
|BUTTERFL.BMP||Sample BMP file of a butterfly (BINARY DATA)|