3 * Purpose: This file contains routines for manipulating the VGA palette.
\r
10 static void fadePalette(byte fade, byte start, word iter, byte *palette);
\r
11 static byte tmppal[PAL_SIZE];
\r
13 /* fade and flash */
\r
15 fadeOn(word fade, byte *palette) {
\r
16 fadePalette(-fade, 64, 64/fade+1, palette);
\r
21 fadeOff(word fade, byte *palette) {
\r
22 fadePalette(fade, 0, 64/fade+1, palette);
\r
27 fadeOffHalf(word fade, byte *palette) {
\r
28 fadePaletteHalf(fade, 0, 64/fade+1, palette);
\r
33 flashOn(word fade, byte *palette) {
\r
34 fadePalette(fade, -64, 64/fade+1, palette);
\r
39 flashOff(word fade, byte *palette) {
\r
40 fadePalette(-fade, 0, 64/fade+1, palette);
\r
45 fadePalette(byte fade, byte start, word iter, byte *palette) {
\r
49 /* handle the case where we just update */
\r
55 while(iter > 0) { /* FadeLoop */
\r
56 for(i=0; i<PAL_SIZE; i++) { /* loadpal_loop */
\r
57 tmppal[i] = palette[i] - dim;
\r
58 if(tmppal[i] > 127) {
\r
60 } else if(tmppal[i] > 63) {
\r
71 fadePaletteHalf(byte fade, byte start, word iter, byte *palette) {
\r
75 /* handle the case where we just update */
\r
81 while(iter > iter/2) { /* FadeLoop */
\r
82 for(i=0; i<PAL_SIZE; i++) { /* loadpal_loop */
\r
83 tmppal[i] = palette[i] - dim;
\r
84 if(tmppal[i] > 127) {
\r
86 } else if(tmppal[i] > 63) {
\r
98 palSave(byte *palette) {
\r
101 outp(PEL_READ_REG, 0); /* start at palette entry 0 */
\r
102 for(i=0; i<PAL_SIZE; i++) {
\r
103 palette[i] = inp(PEL_DATA_REG); /* read the palette data */
\r
111 ptr = malloc(PAL_SIZE);
\r
113 /* handle errors */
\r
115 printf("Could not allocate palette.\n");
\r
124 loadPaletteFile(byte *filename, byte **palette) {
\r
128 /* free the palette if it exists */
\r
133 /* allocate the new palette */
\r
134 *palette = newPal();
\r
136 /* open the file */
\r
137 file = fopen(filename, "rb");
\r
139 printf("Could not open palette file: %s\n", filename);
\r
143 /* read the file */
\r
145 while(!feof(file)) {
\r
146 *ptr++ = fgetc(file);
\r
156 fadePalette(-1, 64, 1, tmppal);
\r
162 fadePalette(-1, -64, 1, tmppal);
\r
168 palUpdate(byte *p) {
\r
171 outp(PEL_WRITE_REG, 0); /* start at the beginning of palette */
\r
172 for(i=0; i<PAL_SIZE/2; i++) {
\r
173 outp(PEL_DATA_REG, p[i]);
\r
175 waitborder(); /* waits one retrace -- less flicker */
\r
176 for(i=PAL_SIZE/2; i<PAL_SIZE; i++) {
\r
177 outp(PEL_DATA_REG, p[i]);
\r
184 while(inp(INPUT_STATUS_1) & 8) {
\r
188 while(!(inp(INPUT_STATUS_1) & 8)) {
\r