|
|
1.1 root 1: /* $Id: vidmodes.c,v 1.5 2005/11/20 20:12:45 deuce Exp $ */
2:
3: #include <stdlib.h>
4:
5: #include "vidmodes.h"
6:
7: struct video_params vparams[36] = {
8: /* BW 40x25 */
9: {BW40, GREYSCALE_PALETTE, 40, 25, 14, 15, 16, 8},
10: /* CO 40x25 */
11: {C40, COLOUR_PALETTE, 40, 25, 14, 15, 16, 8},
12: /* BW 80x25 */
13: {BW80, GREYSCALE_PALETTE, 80, 25, 14, 15, 16, 8},
14: /* CO 80x25 */
15: {C80, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8},
16: /* MONO */
17: {MONO, 0, 80, 25, 14, 15, 16, 8},
18: /* CO 40x14 */
19: {C40X14, COLOUR_PALETTE, 40, 14, 14, 15, 16, 8},
20: /* CO 40x21 */
21: {C40X21, COLOUR_PALETTE, 40, 21, 14, 15, 16, 8},
22: /* CO 40x28 */
23: {C40X28, COLOUR_PALETTE, 40, 28, 12, 13, 14, 8},
24: /* CO 40x43 */
25: {C40X43, COLOUR_PALETTE, 40, 43, 7, 7, 8, 8},
26: /* CO 40x50 */
27: {C40X50, COLOUR_PALETTE, 40, 50, 7, 7, 8, 8},
28: /* CO 40x60 */
29: {C40X60, COLOUR_PALETTE, 40, 60, 7, 7, 8, 8},
30: /* CO 80x14 */
31: {C80X14, COLOUR_PALETTE, 80, 14, 14, 15, 16, 8},
32: /* CO 80x21 */
33: {C80X21, COLOUR_PALETTE, 80, 21, 14, 15, 16, 8},
34: /* CO 80x28 */
35: {C80X28, COLOUR_PALETTE, 80, 28, 12, 13, 14, 8},
36: /* CO 80x43 */
37: {C80X43, COLOUR_PALETTE, 80, 43, 7, 7, 8, 8},
38: /* CO 80x50 */
39: {C80X50, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8},
40: /* CO 80x60 */
41: {C80X60, COLOUR_PALETTE, 80, 60, 7, 7, 8, 8},
42: /* B 40x14 */
43: {BW40X14, GREYSCALE_PALETTE, 40, 14, 14, 15, 16, 8},
44: /* BW 40x21 */
45: {BW40X21, GREYSCALE_PALETTE, 40, 21, 14, 15, 16, 8},
46: /* BW 40x28 */
47: {BW40X28, GREYSCALE_PALETTE, 40, 28, 12, 13, 14, 8},
48: /* BW 40x43 */
49: {BW40X43, GREYSCALE_PALETTE, 40, 43, 7, 7, 8, 8},
50: /* BW 40x50 */
51: {BW40X50, GREYSCALE_PALETTE, 40, 50, 7, 7, 8, 8},
52: /* BW 40x60 */
53: {BW40X60, GREYSCALE_PALETTE, 40, 60, 7, 7, 8, 8},
54: /* BW 80x14 */
55: {BW80X14, GREYSCALE_PALETTE, 80, 14, 14, 15, 16, 8},
56: /* BW 80x21 */
57: {BW80X21, GREYSCALE_PALETTE, 80, 21, 14, 15, 16, 8},
58: /* BW 80x28 */
59: {BW80X28, GREYSCALE_PALETTE, 80, 28, 12, 13, 14, 8},
60: /* BW 80x43 */
61: {BW80X43, GREYSCALE_PALETTE, 80, 43, 7, 7, 8, 8},
62: /* BW 80x50 */
63: {BW80X50, GREYSCALE_PALETTE, 80, 50, 7, 7, 8, 8},
64: /* BW 80x60 */
65: {BW80X60, GREYSCALE_PALETTE, 80, 60, 7, 7, 8, 8},
66: /* MONO 80x14 */
67: {MONO14, MONO_PALETTE, 80, 14, 14, 15, 16, 8},
68: /* MONO 80x21 */
69: {MONO21, MONO_PALETTE, 80, 21, 14, 15, 16, 8},
70: /* MONO 80x28 */
71: {MONO28, MONO_PALETTE, 80, 28, 12, 13, 14, 8},
72: /* MONO 80x43 */
73: {MONO43, MONO_PALETTE, 80, 43, 7, 7, 8, 8},
74: /* MONO 80x50 */
75: {MONO50, MONO_PALETTE, 80, 50, 7, 7, 8, 8},
76: /* MONO 80x60 */
77: {MONO60, MONO_PALETTE, 80, 60, 7, 7, 8, 8},
78: /* Magical C4350 Mode */
79: {C4350, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8},
80: };
81:
82: unsigned char palettes[3][16] = {
83: /* Mono */
84: { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
85: 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07
86: },
87: /* Black and White */
88: { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
89: 0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f
90: },
91: /* Colour */
92: { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
93: 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
94: }
95: };
96:
97: struct dac_colors dac_default16[16] = {
98: {0, 0, 0}, {0, 0, 42}, {0, 42, 0}, {0, 42, 42},
99: {42, 0, 0}, {42, 0, 42}, {42, 21, 0}, {42, 42, 42},
100: {21, 21, 21}, {21, 21, 63}, {21, 63, 21}, {21, 63, 63},
101: {63, 21, 21}, {63, 21, 63}, {63, 63, 21}, {63, 63, 63}
102: };
103:
104: struct dac_colors dac_default256[16] = {
105: {0, 0, 0}, {0, 0, 168}, {0, 168, 0}, {0, 168, 168},
106: {168, 0, 0}, {168, 0, 168}, {168, 84, 0}, {168, 168, 168},
107: {84, 84, 84}, {84, 84, 255}, {84, 255, 84}, {84, 255, 255},
108: {255, 84, 84}, {255, 84, 255}, {255, 255, 84}, {255, 255, 255}
109: };
110:
111: int find_vmode(int mode)
112: {
113: unsigned i;
114:
115: for (i = 0; i < NUMMODES; i++)
116: if (vparams[i].mode == mode)
117: return i;
118:
119: return -1;
120: }
121:
122: int load_vmode(struct video_stats *vs, int mode)
123: {
124: int i;
125: unsigned short *newvmem;
126:
127: i=find_vmode(mode);
128: if(i==-1)
129: return(-1);
130: newvmem=(unsigned short *)realloc(vs->vmem, vparams[i].cols*vparams[i].rows*sizeof(unsigned short));
131: if(newvmem==NULL)
132: return(-1);
133: vs->vmem=newvmem;
134: vs->rows=vparams[i].rows;
135: vs->cols=vparams[i].cols;
136: vs->curs_start=vparams[i].curs_start;
137: vs->curs_end=vparams[i].curs_end;
138: vs->default_curs_start=vparams[i].curs_start;
139: vs->default_curs_end=vparams[i].curs_end;
140: if(vs->curs_row < 0)
141: vs->curs_row=0;
142: if(vs->curs_row >= vparams[i].rows)
143: vs->curs_row=vparams[i].rows-1;
144: if(vs->curs_col < 0)
145: vs->curs_col=0;
146: if(vs->curs_col >= vparams[i].cols)
147: vs->curs_col=vparams[i].cols-1;
148: vs->palette=palettes[vparams[i].palette];
149: vs->charheight=vparams[i].charheight;
150: vs->charwidth=vparams[i].charwidth;
151: vs->mode=mode;
152: return(0);
153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.