From 1e8eb27200ef79aaf987e207c1681c24f87dbb97 Mon Sep 17 00:00:00 2001 From: Jeremiah Flerchinger Date: Fri, 17 Oct 2008 15:28:26 -0600 Subject: [PATCH] winedos: Added missing values to VGA Mode 19 (256 color) palette registers. Windows programs that access VGA directly or through BIOS that previously displayed black for many values should now show correct values for many more cases. --- dlls/winedos/vga.c | 307 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 280 insertions(+), 27 deletions(-) diff --git a/dlls/winedos/vga.c b/dlls/winedos/vga.c index a8437a31b5a..5a568ced969 100644 --- a/dlls/winedos/vga.c +++ b/dlls/winedos/vga.c @@ -159,10 +159,12 @@ static void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high ); static HWND vga_hwnd = NULL; /* - * For simplicity, I'm creating a second palette. - * 16 color accesses will use these pointers and insert - * entries from the 64-color palette into the default - * palette. --Robert 'Admiral' Coeyman + * VGA Palette Registers, in actual 18 bit color + * port 3C0H - 6 bit rgbRGB format + * + * 16 color accesses will use these pointers and insert + * entries from the 64-color palette (mode 18) into the default + * palette. --Robert 'Admiral' Coeyman */ static char vga_16_palette[17]={ @@ -173,7 +175,7 @@ static char vga_16_palette[17]={ 0x04, /* 4 - Red */ 0x05, /* 5 - Magenta */ 0x14, /* 6 - Brown */ - 0x07, /* 7 - Light gray */ + 0x07, /* 7 - White (Light gray) */ 0x38, /* 8 - Dark gray */ 0x39, /* 9 - Light blue */ 0x3a, /* A - Light green */ @@ -181,35 +183,286 @@ static char vga_16_palette[17]={ 0x3c, /* C - Light red */ 0x3d, /* D - Light magenta */ 0x3e, /* E - Yellow */ - 0x3f, /* F - White */ + 0x3f, /* F - Bright White (White) */ 0x00 /* Border Color */ }; +/* + * Mode 19 Default Color Register Setting + * DAC palette registers, converted from actual 18 bit color to 24. + */ static PALETTEENTRY vga_def_palette[256]={ /* red green blue */ - {0x00, 0x00, 0x00}, /* 0 - Black */ - {0x00, 0x00, 0x80}, /* 1 - Blue */ - {0x00, 0x80, 0x00}, /* 2 - Green */ - {0x00, 0x80, 0x80}, /* 3 - Cyan */ - {0x80, 0x00, 0x00}, /* 4 - Red */ - {0x80, 0x00, 0x80}, /* 5 - Magenta */ - {0x80, 0x80, 0x00}, /* 6 - Brown */ - {0xC0, 0xC0, 0xC0}, /* 7 - Light gray */ - {0x80, 0x80, 0x80}, /* 8 - Dark gray */ - {0x00, 0x00, 0xFF}, /* 9 - Light blue */ - {0x00, 0xFF, 0x00}, /* A - Light green */ - {0x00, 0xFF, 0xFF}, /* B - Light cyan */ - {0xFF, 0x00, 0x00}, /* C - Light red */ - {0xFF, 0x00, 0xFF}, /* D - Light magenta */ - {0xFF, 0xFF, 0x00}, /* E - Yellow */ - {0xFF, 0xFF, 0xFF}, /* F - White */ - {0,0,0} /* FIXME: a series of continuous rainbow hues should follow */ + /* 16 colors in IRGB values */ + {0x00, 0x00, 0x00}, /* 0 (0) - Black */ + {0x00, 0x00, 0xAA}, /* 1 (1) - Blue */ + {0x00, 0xAA, 0x00}, /* 2 (2) - Green */ + {0x00, 0xAA, 0xAA}, /* 3 (3) - Cyan */ + {0xAA, 0x00, 0x00}, /* 4 (4) - Red */ + {0xAA, 0x00, 0xAA}, /* 5 (5) - Magenta */ + {0xAA, 0x55, 0x00}, /* 6 (6) - Brown */ + {0xAA, 0xAA, 0xAA}, /* 7 (7) - White (Light gray) */ + {0x55, 0x55, 0x55}, /* 8 (8) - Dark gray */ + {0x55, 0x55, 0xFF}, /* 9 (9) - Light blue */ + {0x55, 0xFF, 0x55}, /* 10 (A) - Light green */ + {0x55, 0xFF, 0xFF}, /* 11 (B) - Light cyan */ + {0xFF, 0x55, 0x55}, /* 12 (C) - Light red */ + {0xFF, 0x55, 0xFF}, /* 13 (D) - Light magenta */ + {0xFF, 0xFF, 0x55}, /* 14 (E) - Yellow */ + {0xFF, 0xFF, 0xFF}, /* 15 (F) - Bright White (White) */ + /* 16 shades of gray */ + {0x00, 0x00, 0x00}, /* 16 (10) */ + {0x10, 0x10, 0x10}, /* 17 (11) */ + {0x20, 0x20, 0x20}, /* 18 (12) */ + {0x35, 0x35, 0x35}, /* 19 (13) */ + {0x45, 0x45, 0x45}, /* 20 (14) */ + {0x55, 0x55, 0x55}, /* 21 (15) */ + {0x65, 0x65, 0x65}, /* 22 (16) */ + {0x75, 0x75, 0x75}, /* 23 (17) */ + {0x8A, 0x8A, 0x8A}, /* 24 (18) */ + {0x9A, 0x9A, 0x9A}, /* 25 (19) */ + {0xAA, 0xAA, 0xAA}, /* 26 (1A) */ + {0xBA, 0xBA, 0xBA}, /* 27 (1B) */ + {0xCA, 0xCA, 0xCA}, /* 28 (1C) */ + {0xDF, 0xDF, 0xDF}, /* 29 (1D) */ + {0xEF, 0xEF, 0xEF}, /* 30 (1E) */ + {0xFF, 0xFF, 0xFF}, /* 31 (1F) */ + /* High Intensity group - 72 colors in 1/3 saturation groups (20H-37H high) */ + {0x00, 0x00, 0xFF}, /* 32 (20) */ + {0x41, 0x00, 0xFF}, /* 33 (21) */ + {0x82, 0x00, 0xFF}, /* 34 (22) */ + {0xBE, 0x00, 0xFF}, /* 35 (23) */ + {0xFF, 0x00, 0xFF}, /* 36 (24) */ + {0xFF, 0x00, 0xBE}, /* 37 (25) */ + {0xFF, 0x00, 0x82}, /* 38 (26) */ + {0xFF, 0x00, 0x41}, /* 39 (27) */ + {0xFF, 0x00, 0x00}, /* 40 (28) */ + {0xFF, 0x41, 0x00}, /* 41 (29) */ + {0xFF, 0x82, 0x00}, /* 42 (2A) */ + {0xFF, 0xBE, 0x00}, /* 43 (2B) */ + {0xFF, 0xFF, 0x00}, /* 44 (2C) */ + {0xBE, 0xFF, 0x00}, /* 45 (2D) */ + {0x82, 0xFF, 0x00}, /* 46 (2E) */ + {0x41, 0xFF, 0x00}, /* 47 (2F) */ + {0x00, 0xFF, 0x00}, /* 48 (30) */ + {0x00, 0xFF, 0x41}, /* 49 (31) */ + {0x00, 0xFF, 0x82}, /* 50 (32) */ + {0x00, 0xFF, 0xBE}, /* 51 (33) */ + {0x00, 0xFF, 0xFF}, /* 52 (34) */ + {0x00, 0xBE, 0xFF}, /* 53 (35) */ + {0x00, 0x82, 0xFF}, /* 54 (36) */ + {0x00, 0x41, 0xFF}, /* 55 (37) */ + /* High Intensity group - 72 colors in 2/3 saturation groups (38H-4FH moderate) */ + {0x82, 0x82, 0xFF}, /* 56 (38) */ + {0x9E, 0x82, 0xFF}, /* 57 (39) */ + {0xBE, 0x82, 0xFF}, /* 58 (3A) */ + {0xDF, 0x82, 0xFF}, /* 59 (3B) */ + {0xFF, 0x82, 0xFF}, /* 60 (3C) */ + {0xFF, 0x82, 0xDF}, /* 61 (3D) */ + {0xFF, 0x82, 0xBE}, /* 62 (3E) */ + {0xFF, 0x82, 0x9E}, /* 63 (3F) */ + {0xFF, 0x82, 0x82}, /* 64 (40) */ + {0xFF, 0x9E, 0x82}, /* 65 (41) */ + {0xFF, 0xBE, 0x82}, /* 66 (42) */ + {0xFF, 0xDF, 0x82}, /* 67 (43) */ + {0xFF, 0xFF, 0x82}, /* 68 (44) */ + {0xDF, 0xFF, 0x82}, /* 69 (45) */ + {0xBE, 0xFF, 0x82}, /* 70 (46) */ + {0x9E, 0xFF, 0x82}, /* 71 (47) */ + {0x82, 0xFF, 0x82}, /* 72 (48) */ + {0x82, 0xFF, 0x9E}, /* 73 (49) */ + {0x82, 0xFF, 0xBE}, /* 74 (4A) */ + {0x82, 0xFF, 0xDF}, /* 75 (4B) */ + {0x82, 0xFF, 0xFF}, /* 76 (4C) */ + {0x82, 0xDF, 0xFF}, /* 77 (4D) */ + {0x82, 0xBE, 0xFF}, /* 78 (4E) */ + {0x82, 0x9E, 0xFF}, /* 79 (4F) */ + /* High Intensity group - 72 colors in 3/3 saturation groups (50H-67H low) */ + {0xBA, 0xBA, 0xFF}, /* 80 (50) */ + {0xCA, 0xBA, 0xFF}, /* 81 (51) */ + {0xDF, 0xBA, 0xFF}, /* 82 (52) */ + {0xEF, 0xBA, 0xFF}, /* 83 (53) */ + {0xFF, 0xBA, 0xFF}, /* 84 (54) */ + {0xFF, 0xBA, 0xEF}, /* 85 (55) */ + {0xFF, 0xBA, 0xDF}, /* 86 (56) */ + {0xFF, 0xBA, 0xCA}, /* 87 (57) */ + {0xFF, 0xBA, 0xBA}, /* 88 (58) */ + {0xFF, 0xCA, 0xBA}, /* 89 (59) */ + {0xFF, 0xDF, 0xBA}, /* 90 (5A) */ + {0xFF, 0xEF, 0xBA}, /* 91 (5B) */ + {0xFF, 0xFF, 0xBA}, /* 92 (5C) */ + {0xEF, 0xFF, 0xBA}, /* 93 (5D) */ + {0xDF, 0xFF, 0xBA}, /* 94 (5E) */ + {0xCA, 0xFF, 0xBA}, /* 95 (5F) */ + {0xBA, 0xFF, 0xBA}, /* 96 (60) */ + {0xBA, 0xFF, 0xCA}, /* 97 (61) */ + {0xBA, 0xFF, 0xDF}, /* 98 (62) */ + {0xBA, 0xFF, 0xEF}, /* 99 (63) */ + {0xBA, 0xFF, 0xFF}, /* 100 (64) */ + {0xBA, 0xEF, 0xFF}, /* 101 (65) */ + {0xBA, 0xDF, 0xFF}, /* 102 (66) */ + {0xBA, 0xCA, 0xFF}, /* 103 (67) */ + /* Medium Intensity group - 72 colors in 1/3 saturation groups (68H-7FH high) */ + {0x00, 0x00, 0x71}, /* 104 (68) */ + {0x1C, 0x00, 0x71}, /* 105 (69) */ + {0x39, 0x00, 0x71}, /* 106 (6A) */ + {0x55, 0x00, 0x71}, /* 107 (6B) */ + {0x71, 0x00, 0x71}, /* 108 (6C) */ + {0x71, 0x00, 0x55}, /* 109 (6D) */ + {0x71, 0x00, 0x39}, /* 110 (6E) */ + {0x71, 0x00, 0x1C}, /* 111 (6F) */ + {0x71, 0x00, 0x00}, /* 112 (70) */ + {0x71, 0x1C, 0x00}, /* 113 (71) */ + {0x71, 0x39, 0x00}, /* 114 (72) */ + {0x71, 0x55, 0x00}, /* 115 (73) */ + {0x71, 0x71, 0x00}, /* 116 (74) */ + {0x55, 0x71, 0x00}, /* 117 (75) */ + {0x39, 0x71, 0x00}, /* 118 (76) */ + {0x1C, 0x71, 0x00}, /* 119 (77) */ + {0x00, 0x71, 0x00}, /* 120 (78) */ + {0x00, 0x71, 0x1C}, /* 121 (79) */ + {0x00, 0x71, 0x39}, /* 122 (7A) */ + {0x00, 0x71, 0x55}, /* 123 (7B) */ + {0x00, 0x71, 0x71}, /* 124 (7C) */ + {0x00, 0x55, 0x71}, /* 125 (7D) */ + {0x00, 0x39, 0x71}, /* 126 (7E) */ + {0x00, 0x1C, 0x71}, /* 127 (7F) */ + /* Medium Intensity group - 72 colors in 2/3 saturation groups (80H-97H moderate) */ + {0x39, 0x39, 0x71}, /* 128 (80) */ + {0x45, 0x39, 0x71}, /* 129 (81) */ + {0x55, 0x39, 0x71}, /* 130 (82) */ + {0x61, 0x39, 0x71}, /* 131 (83) */ + {0x71, 0x39, 0x71}, /* 132 (84) */ + {0x71, 0x39, 0x61}, /* 133 (85) */ + {0x71, 0x39, 0x55}, /* 134 (86) */ + {0x71, 0x39, 0x45}, /* 135 (87) */ + {0x71, 0x39, 0x39}, /* 136 (88) */ + {0x71, 0x45, 0x39}, /* 137 (89) */ + {0x71, 0x55, 0x39}, /* 138 (8A) */ + {0x71, 0x61, 0x39}, /* 139 (8B) */ + {0x71, 0x71, 0x39}, /* 140 (8C) */ + {0x61, 0x71, 0x39}, /* 141 (8D) */ + {0x55, 0x71, 0x39}, /* 142 (8E) */ + {0x45, 0x71, 0x39}, /* 143 (8F) */ + {0x39, 0x71, 0x39}, /* 144 (90) */ + {0x39, 0x71, 0x45}, /* 145 (91) */ + {0x39, 0x71, 0x55}, /* 146 (92) */ + {0x39, 0x71, 0x61}, /* 147 (93) */ + {0x39, 0x71, 0x71}, /* 148 (94) */ + {0x39, 0x61, 0x71}, /* 149 (95) */ + {0x39, 0x55, 0x71}, /* 150 (96) */ + {0x39, 0x45, 0x71}, /* 151 (97) */ + /* Medium Intensity group - 72 colors in 3/3 saturation groups (98H-AFH low) */ + {0x51, 0x51, 0x71}, /* 152 (98) */ + {0x59, 0x51, 0x71}, /* 153 (99) */ + {0x61, 0x51, 0x71}, /* 154 (9A) */ + {0x69, 0x51, 0x71}, /* 155 (9B) */ + {0x71, 0x51, 0x71}, /* 156 (9C) */ + {0x71, 0x51, 0x69}, /* 157 (9D) */ + {0x71, 0x51, 0x61}, /* 158 (9E) */ + {0x71, 0x51, 0x59}, /* 159 (9F) */ + {0x71, 0x51, 0x51}, /* 160 (A0) */ + {0x71, 0x59, 0x51}, /* 161 (A1) */ + {0x71, 0x61, 0x51}, /* 162 (A2) */ + {0x71, 0x69, 0x51}, /* 163 (A3) */ + {0x71, 0x71, 0x51}, /* 164 (A4) */ + {0x69, 0x71, 0x51}, /* 165 (A5) */ + {0x61, 0x71, 0x51}, /* 166 (A6) */ + {0x59, 0x71, 0x51}, /* 167 (A7) */ + {0x51, 0x71, 0x51}, /* 168 (A8) */ + {0x51, 0x71, 0x59}, /* 169 (A9) */ + {0x51, 0x71, 0x61}, /* 170 (AA) */ + {0x51, 0x71, 0x69}, /* 171 (AB) */ + {0x51, 0x71, 0x71}, /* 172 (AC) */ + {0x51, 0x69, 0x71}, /* 173 (AD) */ + {0x51, 0x61, 0x71}, /* 174 (AE) */ + {0x51, 0x59, 0x71}, /* 175 (AF) */ + /* Low Intensity group - 72 colors in 1/3 saturation groups (B0H-C7H high) */ + {0x00, 0x00, 0x41}, /* 176 (B0) */ + {0x10, 0x00, 0x41}, /* 177 (B1) */ + {0x20, 0x00, 0x41}, /* 178 (B2) */ + {0x31, 0x00, 0x41}, /* 179 (B3) */ + {0x41, 0x00, 0x41}, /* 180 (B4) */ + {0x41, 0x00, 0x31}, /* 181 (B5) */ + {0x41, 0x00, 0x20}, /* 182 (B6) */ + {0x41, 0x00, 0x10}, /* 183 (B7) */ + {0x41, 0x00, 0x00}, /* 184 (B8) */ + {0x41, 0x10, 0x00}, /* 185 (B9) */ + {0x41, 0x20, 0x00}, /* 186 (BA) */ + {0x41, 0x31, 0x00}, /* 187 (BB) */ + {0x41, 0x41, 0x00}, /* 188 (BC) */ + {0x31, 0x41, 0x00}, /* 189 (BD) */ + {0x20, 0x41, 0x00}, /* 190 (BE) */ + {0x10, 0x41, 0x00}, /* 191 (BF) */ + {0x00, 0x41, 0x00}, /* 192 (C0) */ + {0x00, 0x41, 0x10}, /* 193 (C1) */ + {0x00, 0x41, 0x20}, /* 194 (C2) */ + {0x00, 0x41, 0x31}, /* 195 (C3) */ + {0x00, 0x41, 0x41}, /* 196 (C4) */ + {0x00, 0x31, 0x41}, /* 197 (C5) */ + {0x00, 0x20, 0x41}, /* 198 (C6) */ + {0x00, 0x10, 0x41}, /* 199 (C7) */ + /* Low Intensity group - 72 colors in 2/3 saturation groups (C8H-DFH moderate) */ + {0x20, 0x20, 0x41}, /* 200 (C8) */ + {0x28, 0x20, 0x41}, /* 201 (C9) */ + {0x31, 0x20, 0x41}, /* 202 (CA) */ + {0x39, 0x20, 0x41}, /* 203 (CB) */ + {0x41, 0x20, 0x41}, /* 204 (CC) */ + {0x41, 0x20, 0x39}, /* 205 (CD) */ + {0x41, 0x20, 0x31}, /* 206 (CE) */ + {0x41, 0x20, 0x28}, /* 207 (CF) */ + {0x41, 0x20, 0x20}, /* 208 (D0) */ + {0x41, 0x28, 0x20}, /* 209 (D1) */ + {0x41, 0x31, 0x20}, /* 210 (D2) */ + {0x41, 0x39, 0x20}, /* 211 (D3) */ + {0x41, 0x41, 0x20}, /* 212 (D4) */ + {0x39, 0x41, 0x20}, /* 213 (D5) */ + {0x31, 0x41, 0x20}, /* 214 (D6) */ + {0x28, 0x41, 0x20}, /* 215 (D7) */ + {0x20, 0x41, 0x20}, /* 216 (D8) */ + {0x20, 0x41, 0x28}, /* 217 (D9) */ + {0x20, 0x41, 0x31}, /* 218 (DA) */ + {0x20, 0x41, 0x39}, /* 219 (DB) */ + {0x20, 0x41, 0x41}, /* 220 (DC) */ + {0x20, 0x39, 0x41}, /* 221 (DD) */ + {0x20, 0x31, 0x41}, /* 222 (DE) */ + {0x20, 0x28, 0x41}, /* 223 (DF) */ + /* Low Intensity group - 72 colors in 3/3 saturation groups (E0H-F7H low) */ + {0x2D, 0x2D, 0x41}, /* 223 (E0) */ + {0x31, 0x2D, 0x41}, /* 224 (E1) */ + {0x35, 0x2D, 0x41}, /* 225 (E2) */ + {0x3D, 0x2D, 0x41}, /* 226 (E3) */ + {0x41, 0x2D, 0x41}, /* 227 (E4) */ + {0x41, 0x2D, 0x3D}, /* 228 (E5) */ + {0x41, 0x2D, 0x35}, /* 229 (E6) */ + {0x41, 0x2D, 0x31}, /* 230 (E7) */ + {0x41, 0x2D, 0x2D}, /* 231 (E8) */ + {0x41, 0x31, 0x2D}, /* 232 (E9) */ + {0x41, 0x35, 0x2D}, /* 233 (EA) */ + {0x41, 0x3D, 0x2D}, /* 234 (EB) */ + {0x41, 0x41, 0x2D}, /* 235 (EC) */ + {0x3D, 0x41, 0x2D}, /* 236 (ED) */ + {0x35, 0x41, 0x2D}, /* 237 (EE) */ + {0x31, 0x41, 0x2D}, /* 238 (EF) */ + {0x2D, 0x41, 0x2D}, /* 239 (F0) */ + {0x2D, 0x41, 0x31}, /* 240 (F1) */ + {0x2D, 0x41, 0x35}, /* 241 (F2) */ + {0x2D, 0x41, 0x3D}, /* 242 (F3) */ + {0x2D, 0x41, 0x41}, /* 243 (F4) */ + {0x2D, 0x3D, 0x41}, /* 244 (F5) */ + {0x2D, 0x35, 0x41}, /* 245 (F6) */ + {0x2D, 0x31, 0x41}, /* 246 (F7) */ + /* Fill up remainder of palettes with black */ + {0,0,0} }; /* - * This palette is the dos default, converted from 18 bit color to 24. - * It contains only 64 entries of colors--all others are zeros. - * --Robert 'Admiral' Coeyman + * Mode 18 Default Color Register Setting + * DAC palette registers, converted from actual 18 bit color to 24. + * + * This palette is the dos default, converted from 18 bit color to 24. + * It contains only 64 entries of colors--all others are zeros. + * --Robert 'Admiral' Coeyman */ static PALETTEENTRY vga_def64_palette[256]={ /* red green blue */ @@ -220,7 +473,7 @@ static PALETTEENTRY vga_def64_palette[256]={ {0xaa, 0x00, 0x00}, /* 0x04 Red */ {0xaa, 0x00, 0xaa}, /* 0x05 Magenta */ {0xaa, 0xaa, 0x00}, /* 0x06 */ - {0xaa, 0xaa, 0xaa}, /* 0x07 Light Gray */ + {0xaa, 0xaa, 0xaa}, /* 0x07 White (Light Gray) */ {0x00, 0x00, 0x55}, /* 0x08 */ {0x00, 0x00, 0xff}, /* 0x09 */ {0x00, 0xaa, 0x55}, /* 0x0a */