Mercurial > repos > blastem
comparison vdp.c @ 2199:6f66356af4e2
Fix Game Gear color issues (thanks Sik!)
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 22 Aug 2022 20:05:36 -0700 |
parents | 01ff005b08f6 |
children | 2f8984ff5c85 |
comparison
equal
deleted
inserted
replaced
2198:0dcb9e4dee7f | 2199:6f66356af4e2 |
---|---|
164 context->type = type; | 164 context->type = type; |
165 | 165 |
166 if (!color_map_init_done) { | 166 if (!color_map_init_done) { |
167 uint8_t b,g,r; | 167 uint8_t b,g,r; |
168 for (uint16_t color = 0; color < (1 << 12); color++) { | 168 for (uint16_t color = 0; color < (1 << 12); color++) { |
169 if (color & FBUF_SHADOW) { | 169 if (type == VDP_GAMEGEAR) { |
170 b = (color >> 8 & 0xF) * 0x11; | |
171 g = (color >> 4 & 0xF) * 0x11; | |
172 r = (color & 0xF) * 0x11; | |
173 }else if (color & FBUF_SHADOW) { | |
170 b = levels[(color >> 9) & 0x7]; | 174 b = levels[(color >> 9) & 0x7]; |
171 g = levels[(color >> 5) & 0x7]; | 175 g = levels[(color >> 5) & 0x7]; |
172 r = levels[(color >> 1) & 0x7]; | 176 r = levels[(color >> 1) & 0x7]; |
173 } else if(color & FBUF_HILIGHT) { | 177 } else if(color & FBUF_HILIGHT) { |
174 b = levels[((color >> 9) & 0x7) + 7]; | 178 b = levels[((color >> 9) & 0x7) + 7]; |
175 g = levels[((color >> 5) & 0x7) + 7]; | 179 g = levels[((color >> 5) & 0x7) + 7]; |
176 r = levels[((color >> 1) & 0x7) + 7]; | 180 r = levels[((color >> 1) & 0x7) + 7]; |
177 } else if(color & FBUF_MODE4) { | 181 } else if(color & FBUF_MODE4) { |
178 if (type == VDP_GAMEGEAR) { | 182 //TODO: Mode 4 has a separate DAC tap so this isn't quite correct |
179 b = (color >> 8 & 0xF) * 0x11; | 183 b = levels[(color >> 4 & 0xC) | (color >> 6 & 0x2)]; |
180 g = (color >> 4 & 0xF) * 0x11; | 184 g = levels[(color >> 2 & 0x8) | (color >> 1 & 0x4) | (color >> 4 & 0x2)]; |
181 r = (color & 0xF) * 0x11; | 185 r = levels[(color << 1 & 0xC) | (color >> 1 & 0x2)]; |
182 } else { | |
183 //TODO: Mode 4 has a separate DAC tap so this isn't quite correct | |
184 b = levels[(color >> 4 & 0xC) | (color >> 6 & 0x2)]; | |
185 g = levels[(color >> 2 & 0x8) | (color >> 1 & 0x4) | (color >> 4 & 0x2)]; | |
186 r = levels[(color << 1 & 0xC) | (color >> 1 & 0x2)]; | |
187 } | |
188 } else { | 186 } else { |
189 b = levels[(color >> 8) & 0xE]; | 187 b = levels[(color >> 8) & 0xE]; |
190 g = levels[(color >> 4) & 0xE]; | 188 g = levels[(color >> 4) & 0xE]; |
191 r = levels[color & 0xE]; | 189 r = levels[color & 0xE]; |
192 } | 190 } |
812 { | 810 { |
813 context->colors[index] = color_map[value & CRAM_BITS]; | 811 context->colors[index] = color_map[value & CRAM_BITS]; |
814 context->colors[index + SHADOW_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_SHADOW]; | 812 context->colors[index + SHADOW_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_SHADOW]; |
815 context->colors[index + HIGHLIGHT_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_HILIGHT]; | 813 context->colors[index + HIGHLIGHT_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_HILIGHT]; |
816 if (context->type == VDP_GAMEGEAR) { | 814 if (context->type == VDP_GAMEGEAR) { |
817 context->colors[index + MODE4_OFFSET] = color_map[(value & 0xFFF) | FBUF_MODE4]; | 815 context->colors[index + MODE4_OFFSET] = color_map[value & 0xFFF]; |
818 } else { | 816 } else { |
819 context->colors[index + MODE4_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_MODE4]; | 817 context->colors[index + MODE4_OFFSET] = color_map[(value & CRAM_BITS) | FBUF_MODE4]; |
820 } | 818 } |
821 } | 819 } |
822 | 820 |