data[c] = (int) Math.min((data[c] & 0xff0000) * 1.30f, 0xff0000) & 0xff0000;
data[c+1] = (int) Math.min((data[c+1] & 0xff00) * 1.30f, 0xff00) & 0xff00;
data[c+2] = (int) Math.min((data[c+2] & 0xff) * 1.35f, 0xff);
That way you can use lookups for integer values rather than more expensive on-the-fly float operations. I saw a tremendous speedup in my Jace emulator when I implemented this. Here's my take on it, as well as the necessary YUV conversions, starting around line 196:
The Apple // display is of course very different than Atari. It only had a fixed palette of 16 colors so I was able to represent just those 16 colors. But you can see how I am able to convert each pixel to RGB more quickly on the fly using this lookup technique.
I am very impressed how you implemented other features! Great work!
-Brendan