|
|
1.1.1.2 ! root 1: /* $Id: vidmodes.c,v 1.14 2009/02/10 09:15:29 deuce Exp $ */ 1.1 root 2: 3: #include <stdlib.h> 4: 5: #include "vidmodes.h" 6: 1.1.1.2 ! root 7: struct video_params vparams[49] = { 1.1 root 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}, 1.1.1.2 ! root 80: /* Commodore 64 40x25 mode */ ! 81: {C64_40X25, C64_PALETTE, 40, 25, 0, 7, 8, 8}, ! 82: /* Commodore 128 40x25 mode */ ! 83: {C128_40X25, COLOUR_PALETTE, 40, 25, 0, 7, 8, 8}, ! 84: /* Commodore 128 80x25 mode */ ! 85: {C128_80X25, COLOUR_PALETTE, 80, 25, 0, 7, 8, 8}, ! 86: /* Atari 800 40x24 mode */ ! 87: {ATARI_40X24, ATARI_PALETTE, 40, 24, 0, 7, 8, 8}, ! 88: /* Atari 800 XEP80 80x25 mode */ ! 89: {ATARI_80X25, GREYSCALE_PALETTE, 80, 25, 0, 15, 16, 8}, ! 90: /* VESA 21x132 mode */ ! 91: {VESA_132X21, COLOUR_PALETTE, 132, 21, 14, 15, 16, 8}, ! 92: /* VESA 25x132 mode */ ! 93: {VESA_132X25, COLOUR_PALETTE, 132, 25, 14, 15, 16, 8}, ! 94: /* VESA 28x132 mode */ ! 95: {VESA_132X28, COLOUR_PALETTE, 132, 28, 12, 13, 14, 8}, ! 96: /* VESA 30x132 mode */ ! 97: {VESA_132X30, COLOUR_PALETTE, 132, 30, 14, 15, 16, 8}, ! 98: /* VESA 34x132 mode */ ! 99: {VESA_132X34, COLOUR_PALETTE, 132, 34, 12, 13, 14, 8}, ! 100: /* VESA 43x132 mode */ ! 101: {VESA_132X43, COLOUR_PALETTE, 132, 34, 7, 7, 8, 8}, ! 102: /* VESA 50x132 mode */ ! 103: {VESA_132X50, COLOUR_PALETTE, 132, 50, 7, 7, 8, 8}, ! 104: /* VESA 60x132 mode */ ! 105: {VESA_132X60, COLOUR_PALETTE, 132, 60, 7, 7, 8, 8}, 1.1 root 106: }; 107: 1.1.1.2 ! root 108: unsigned char palettes[5][16] = { 1.1 root 109: /* Mono */ 110: { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 111: 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 112: }, 113: /* Black and White */ 114: { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 115: 0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f 116: }, 117: /* Colour */ 118: { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 119: 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f 1.1.1.2 ! root 120: }, ! 121: /* C64 */ ! 122: { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, ! 123: 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f ! 124: }, ! 125: /* Atari */ ! 126: { 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, ! 127: 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21 ! 128: }, 1.1 root 129: }; 130: 1.1.1.2 ! root 131: struct dac_colors dac_default[TOTAL_DAC_SIZE] = { 1.1 root 132: {0, 0, 0}, {0, 0, 168}, {0, 168, 0}, {0, 168, 168}, 133: {168, 0, 0}, {168, 0, 168}, {168, 84, 0}, {168, 168, 168}, 134: {84, 84, 84}, {84, 84, 255}, {84, 255, 84}, {84, 255, 255}, 1.1.1.2 ! root 135: {255, 84, 84}, {255, 84, 255}, {255, 255, 84}, {255, 255, 255}, ! 136: /* C64 colours */ ! 137: /* Black, White, Red, Cyan, Purple, Green, Blue, Yellow */ ! 138: /* Orange, Brown, Lt Red, Dk Grey, Grey, Lt Green, Lt Blue, Lt Grey */ ! 139: {0x00, 0x00, 0x00}, {0xff, 0xff, 0xff}, {0x68, 0x37, 0x2b}, ! 140: {0x70, 0xa4, 0xb2}, {0x6f, 0x3d, 0x86}, {0x58, 0x8d, 0x43}, ! 141: {0x35, 0x29, 0x79}, {0xb8, 0xc7, 0x6f}, {0x6f, 0x4f, 0x25}, ! 142: {0x43, 0x39, 0x00}, {0x9a, 0x67, 0x59}, {0x44, 0x44, 0x44}, ! 143: {0x6c, 0x6c, 0x6c}, {0x9a, 0xd2, 0x84}, {0x6c, 0x5e, 0xb5}, ! 144: {0x95, 0x95, 0x95}, ! 145: /* Atari Colours */ ! 146: /* BG, FG */ ! 147: {0, 81, 129}, {96, 183, 231}, 1.1 root 148: }; 149: 150: int find_vmode(int mode) 151: { 152: unsigned i; 153: 154: for (i = 0; i < NUMMODES; i++) 155: if (vparams[i].mode == mode) 156: return i; 157: 158: return -1; 159: } 160: 161: int load_vmode(struct video_stats *vs, int mode) 162: { 163: int i; 164: unsigned short *newvmem; 165: 166: i=find_vmode(mode); 167: if(i==-1) 168: return(-1); 169: newvmem=(unsigned short *)realloc(vs->vmem, vparams[i].cols*vparams[i].rows*sizeof(unsigned short)); 170: if(newvmem==NULL) 171: return(-1); 172: vs->vmem=newvmem; 173: vs->rows=vparams[i].rows; 174: vs->cols=vparams[i].cols; 175: vs->curs_start=vparams[i].curs_start; 176: vs->curs_end=vparams[i].curs_end; 177: vs->default_curs_start=vparams[i].curs_start; 178: vs->default_curs_end=vparams[i].curs_end; 1.1.1.2 ! root 179: vs->curs_blink=1; ! 180: vs->curs_visible=1; ! 181: vs->bright_background=0; ! 182: vs->no_bright=0; ! 183: vs->bright_altcharset=0; 1.1 root 184: if(vs->curs_row < 0) 185: vs->curs_row=0; 186: if(vs->curs_row >= vparams[i].rows) 187: vs->curs_row=vparams[i].rows-1; 188: if(vs->curs_col < 0) 189: vs->curs_col=0; 190: if(vs->curs_col >= vparams[i].cols) 191: vs->curs_col=vparams[i].cols-1; 1.1.1.2 ! root 192: memcpy(vs->palette, palettes[vparams[i].palette], sizeof(vs->palette)); ! 193: memcpy(vs->dac_colors, dac_default, sizeof(dac_default)); 1.1 root 194: vs->charheight=vparams[i].charheight; 195: vs->charwidth=vparams[i].charwidth; 196: vs->mode=mode; 197: return(0); 198: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.