[Coco] The myth of the Coco3 256 color mode :)

jmlaw at iprimus.com.au jmlaw at iprimus.com.au
Thu Apr 18 19:08:31 EDT 2013


Hey John,

>AFAIK, Jason Law discovered this independently around the end
>of 2009.  I saw the postings on coco3.com at that time and asked
>Jason for info about using the mode.  I used that info to produce
>my own slideshow stuff (somewhat similar to Joel Ewy's version).
>Since I was developing my coco video player at about that time,
>I also added support for that mode to the video player

I in no way discovered the CoCo 3 256 artifact colors, nor have I ever 
claimed that. Potatohead's (Doug Dingus of the Atari Age forums) post at 
coco3.com got Briza interested, who in-turn repeatedly asked me to help him 
figure out how to use it until I eventually stopped work on the 1&2 pixel 
horizontal scrolling project to see if, without a NTSC CoCo 3, I could be of 
any assistance. That's how I got involved in it. As part of that, I wrote a 
simple BASIC program that generated an on-screen palette containing blocks 
of byte values from 0-255. This was my best guess of how it may work, but 
that program went untested so I didn't know if my ideas were correct or not. 
Not having a go at anyone, just telling it how it was. Robert Gault (RG) was 
starting to play with palette values on the 640 screen and was also close. 
Potatohead (PH) posted not long after, re-explaining the basic principle 
with the palette values and how they can be set to produce a particular 
palette. PH was working with the Propellor micro-controller which apparently 
had a very similar composite video output to the CoCo 3. He had written a 
simple palette program to display the arifact colors, using blocks of byte 
values from 0-255. So this was the first vindication my best guess was 
correct. The palette values I'd not tried previously as I had no way to test 
their function on the artifacts without a NTSC CoCo 3. I'll have to update 
the facebook post where I detailed this for Glen B, I'd forgotten about this 
next part. PH had taken a screen capture of the Propeller output displaying 
his artifacts palette program. I had updated my BASIC program to the 640 
wide screen with the correct palette values and it too worked. But I 
originally used PH's captures to create a .pal file used by paint programs 
to set the 256 RGB index values of a palette used for such images. I did 
this by blurring the image capture to average the color per block to create 
a 256 RGB palette by color picking from each block. This gave a color 
representation for each index (0-255) that was close to that seen with the 
256 composite artifacts. For those who don't know, a 256 color bitmap 
doesn't store RGB values per pixel, but a byte value from (0-255) to 
reference the color to be used from the palette of 256 colors by that pixel. 
The RGB palette information is stored in the bitmap header, but as the 
artifact pixel colors are defined by their byte value, the header is not 
required (unless you wish to have the CoCo 3 do the conversion, as is the 
case with RG's bmp viewer). If you display the pixel data (0-255 values) 
from the bitmap image in video memory on the CoCo 3, these will closely 
replicate the RGB colors of the same index in the .pal file, but in 
composite. This depends how close the .pal file is to the CoCo 3 artifact 
colors. The colors are simply defined by how the composite display handles 
the bit patterns generated. If the tint is off in the capture, so will the 
.pal files be, and the converted color may not be the best color, as was the 
case originally, the NTSC tint was quite a ways off, but was a starting 
point. Later I updated the .pal files with captures of my palette program 
(much larger blocks) and PH adjusted his tint control for a more accurate 
color reference to what we see with the CoCo 3 artifacts. I've since redone 
them a 3rd time with a high quality capture device to make them even more 
accurate. I'd still like to do some fine tweaking of them before releasing 
them soon. RG created an ML palette program based on the block layout I 
used, with the option to display the byte values by column or row as PH's 
was by column and mine was by row :)

The history of who discovered the CoCo 3 256 composite artifacts first is 
vague at best. Potatohead had mentioned using it to generate fractal 
patterns back in the day. There were two articles in Rainbow that I found 
later and extracted, one of which is on tandycoco.com website. The other 
I'll have to dig through my coco files and see if I can find it. GrafExpress 
by Sundog Systems was probably the best indicator that this was useful in 
games/apps. Though just reading over the manual again today, it seems to 
indicate this method was known and had been used even before this program: 
(p45) "Note: This program, like any 256 color program, does not function on 
RGB monitors...". After I'd figured out a simple way to convert an existing 
RGB image to the artifacts, I sent an email to Sockmaster on the topic as he 
may have been interested re his work on the 256 RGB color project he and 
Nick had pursued. Sock's indicated he knew of it and had written a simple 
paint program back in the day. So others had known of it long before any of 
my work own on it.

As far as my discoveries, a simple way to convert and display an existing 
image to use the artifact colors, that requires no processing by the CoCo, 
but defintetly not the artifact colors themselves. As indicated in previous 
posts, I've continued the development and 'discovered' ways to apply the 
artifact colors to produce a half-byte scroll (half pixel in artifacts, 1 
pixel in 16 colors). Color shifting was the obvious problem here and 
toggling the burst phase invert during VSYNC to try to overcome that just 
lead to a color 'bleeding' issue as I suspected would be the case. I've 
'discovered' a simple way to overcome that. I'd also found a simple set of 
palettes of 1024 (actually more like ~993) different colors, 256 visibile at 
once without HSYNC interrupt tricks. I've since created a palette program 
that displays all of these colors simultaneously, using the fore mentioned 
trick. There's a few other bits and pieces that I'll mention when I create 
the webpage on this topic to detail what I have learned or 'discovered' :)

My apologies that the explanation is long, and probably still vague, but 
there is a lot to the initial development and hopefully it answers some of 
the questions others may have had.

>Since then I have discovered that Jason thinks that I tried to take
>credit for his work or at least that I failed to properly credit him.
>I presume that your video is the source of his angst, although I
>would refer people to watch it (esp. around the 2:48 mark) and judge
>for themselves.  At any rate, from forthwith please let the record
>show that Jason provided me with the info I initially used to support
>that mode in the programs mentioned above.

My issue with it John (and hypothetically if I was your best mate I'd say 
exactly the same) is that using someone else's work to greatly enhance your 
project without credit is unchivalrous. Maybe I'm the only one with the 
ideal of if you use someone else's work in your project, credit them for it, 
even if it's just a footnote. Though I seriously doubt I'd be alone on that. 
Personally, I would have considered it an unspoken code of conduct that 
people in a community like ours adhere to, not expecting too much am I? 
Maybe I am. If it was just some unnoticeable subroutine that did the same 
thing just a little bit faster or better that not a lot of work went into, 
I'd probably not be concerned but this was a major and obvious enhancement 
and contribution to your project for which you gave no credit, other than to 
say 'it's documented on coco3.com'. If you remember, at the time I was only 
sharing the palette files with those who wished to assist with the initial 
development and contribute to the project. Any of us could see the 
potential, but I didn't want to share an alpha version so to speak as the 
intro for most to the CoCo3 artifact colors as this could just deter people 
from ever using it. Do you release your alphas to everyone, no, and for the 
same reason :) The palette files were far from accurate and the initial goal 
was to share the workload (and credit) to develop the CoCo 3 artifacts to a 
point we could all use, then release it to anyone who wanted to have a play 
around with it or use it in their own projects. I didn't want to do all the 
work or receive all the credit, I think the latter was obvious in the posts 
I wrote on coco3.com (no longer there for reasons mentioned in previous 
posts). What you do with it, whether you share back what you learn or not is 
up to you once you have them, but yes I do take issue to not credit those 
who's work contributed a great deal to your project. You even conceded 
recently you could have done more in this regard, my own view is you should 
have. I'm not just saying this for my own work but for the others who also 
contributed. I had raised it with you recently due to you wanting early 
details on another project, but until now, still hadn't been mentioned 
anywhere. Perhaps it was an oversight or you simply don't share the 'ideal'. 
Maybe 'my ideal' is just delusional, I do wonder sometimes. Joel Ewy's 
artifacts slideshow project also relied on the work of others and is what I 
would consider, done the right way. You could argue that credit wasn't 
stipulated in sharing of all that (it wasn't released as such), but neither 
was it when shared with Joel, but for some reason he felt it was the right 
thing to do. Thank you Joel. It's not just all about credit for 
contributions though, others may have seen your video demo and may have even 
been interested to contribute to the development project. I don't want to 
take anything away from the video demo, it was definitely great work!!! I'd 
say to anyone who finds themselves using a big portion of someone else's 
work in their project, just mention them somewhere for the sake of community 
spirit if for no other reason :) Unless you have more to say about it, I'm 
happy to leave it at that.

The emulator support topic is a very interesting (and potentially a very 
lengthy one) and one I've put a lot of thought into. This post is way over 
length as it is so I'll save the rest for another time...

Jason




More information about the Coco mailing list