Altering Pickin's Color PROMS




About 1983 or 1984, I saw in an arcade a machine with simple graphics. The object of the game was moving colored squares into the corresponding colored boxes. However, in the first level the colors were light green, yellow and blue. The problem was that I couldn't distinguish the light green and yellow, so I couldn't play that game. I was about 11 or 12 years old, and until I was 18 I didn't know I had a problem perceiving colors called Chronic Educational Daltonism.

Then about year 2000 I was happily playing with MAME and investigating new games when I saw this game again, 16 years later. It turned out to be Pickin' (Valadon Automation, 1983). Of course I was delighted to have rediscovered another game from my youth, or rather a frustration. I liked the game concept but I couldn't play anyway. So again I parked the game in a little corner of the back of my mind.

In February 2004 (past week) I was making a list of my favorite arcade games in MAME32, and I decided that Pickin' should be there. And again the frustration of not being able to play it long enough to even know if I really like the game. So I went to a board and asked for a quick color hack. Dave Widel helped me to change one of the colors, and for the first time in my life, 20 years later, I was able to pass the first level of the game!

It turned out that later levels had more boxes, up to nine. And there were nine colors. If you let the attract mode run by itself, the third demo game will contain nine different colored boxes:
 

Pickin's third demo


Note that the boxes are actually outlined. I filled them to make the colors more noticeable. I'll refer to the boxes in a row/columns fashion, so R1C1 is the top left yellow, and R3C2 is the bottom-center bright red. So far I can't distinguish the R1C1 yellow from the R2C1 bright green, and I can't distinguish either two of the blues R3C1 and R3C3. When outlined, I have probs with R1C3 and R2C3 too (greenish and brown). I can distinguish them but not at first sight.

So I started to investigate how to change the colors to something I could play with ^_^ I had only one information: changing byte 5 of prom 6331-1.3p from 3F to 05 would change the yellow box into red. So now I had to discover two things: which bytes in the color proms defined each of the color boxes, and how the color was encoded in each byte so I could specify my own colors.

First I tried to locate more bytes which when altered, would change the color of the boxes. The proms look quite strange inside: the even bytes are alternatively 00 and FF, and the colors are only the odd bytes. I knew that one color was in byte 5. After some tests, it turned out that the bytes used for boxes are also alterned. I located the bytes for boxes R1C1, R2C1, R3C1 and R1C2 at bytes 5, 9, 13 and 17. I hope you see the pattern... ^_^

Then, before going for the remaining boxes (easy) I had to work out how a byte is transformed into a color. I have to say I was lost in here, so I did something I should have done from the very beginning: look at the source for some notes. Pickin' is in the Bagman driver. I found this in vidhdrw/bagman.c:


/***************************************************************************

  Convert the color PROMs into a more useable format.

  Bagman has two 32 bytes palette PROMs, connected to the RGB output this
  way:

  bit 7 -- 220 ohm resistor  -- \
        -- 470 ohm resistor  -- | -- 470 ohm pulldown resistor -- BLUE

        -- 220 ohm resistor  -- \
        -- 470 ohm resistor  -- | -- 470 ohm pulldown resistor -- GREEN
        -- 1  kohm resistor  -- /

        -- 220 ohm resistor  -- \
        -- 470 ohm resistor  -- | -- 470 ohm pulldown resistor -- RED
  bit 0 -- 1  kohm resistor  -- /

***************************************************************************/

Good. I don't know anything about video hardware, but I can understand that each byte has 3 groups of bits which define different intensities for red, green and blue. Actually it's 2 bits for blue, 3 for green and 3 for red, in that order: BB GGG RRR. So 00 111 111 would be the RGB triplet 255,255,0. Which is the yellow box (R1C1). Which is the hex value 3F ^_^

Of course, you don't have 8bit precision for each color channel. You have 3 bit precision for red and green, and only 2 bit precision for blue. Each bit activates a different resistor which gives out a different intensity. MAME can convert to RGB values knowing the relations of the resistors, well that's a bit too much for me. Instead I looked what was the 8 bit value coming from the 2-3 bit values. This is the table (bits in binary, value in decimal):

2 bits
8 bits

3 bit
8 bit
00
000

000
000
01
079

001
033
10
168

010
071
11
247

011
104



100
151



101
184



110
222



111
255


Knowing this, it was easy detecting the remaining bytes just knowing the color. Two of them are actually in the second prom (6331-1.3r). Finally I built this table:

Pos in File Pos in Pic Hex bb ggg rrr RGB color
p-5 R1C1 0x3F 00 111 111 255,255,000 yellow
p-9 R2C1 0x38 00 111 000 000,255,000 bright green
p-13 R3C1 0xC0 11 000 000 000,000,247 dark blue
p-17 R1C2 0xC7 11 000 111 255,000,247 pink
p-21 R2C2 0xE8 11 101 000 000,184,247 light blue
p-25 R3C2 0x07 00 000 111 255,000,000 red
p-29 R1C3 0x58 01 011 000 000,104,079 dark green
r-1 R2C3 0x13 00 010 011 104,071,000 brown
r-5 R3C3 0xD3 11 010 011 104,071,247 blue


I hope it's clear enough. My research was done! Now I only had to decide which colours I wanted to use. It was a bit tricky because I couldn't use just any value, only 4 possible ones for the blue channel and 8 possible ones for red and green. After some playing with PSP and several mistakes I came up with the following table:

Pos in Pic Hex bb ggg rrr RGB color
R1C1 0x07 00 000 111 255,000,000 bright red
R2C1 0x38 00 111 000 000,255,000 bright green
R3C1 0xC0 11 000 000 000,000,247 dark blue
R1C2 0xC7 11 000 111 255,000,247 pink
R2C2 0xE8 11 101 000 000,184,247 light blue
R3C2 0x04 00 000 100 151,000,000 dark red
R1C3 0x20 00 100 000 000,151,000 dark green
R2C3 0x67 01 100 111 255,151,079 light brown
R3C3 0x5C 01 011 100 151,104,079 dark brown


So I simply replaced the corresponding bytes with the new value. Ta-daaaa! My 20 years old frustration is gone. I have now a Pickin' playable by someone with color perception problems ^_^


Pickin's third demo with altered colors


You can download the already altered proms here:
Pickin' Altered PROMS (274 bytes)

My advice is to keep them away from your precious clean MAME set. Make a folder called pickin and put the two proms there. MAME reads first uncompressed roms, so as long as you are cautious to not pass a rom manager by there, you'll have no problem.

I know that for some people this was kinda silly, I know I'm not Einstein, but I wanted to tell the whole tale, and maybe encourage people into rom hacking. It was not really important how I did it, it was relatively easy (for a first time hack). The important thing is that I got rid of a 20 years old frustration ^_^

Pi.


Last changed 2004-02-26