|
|
1.1 ! root 1: /* ! 2: Hatari - high640x8.c ! 3: ! 4: This file is distributed under the GNU Public License, version 2 or at your ! 5: option any later version. Read the file gpl.txt for details. ! 6: ! 7: Screen Conversion, High Res to 640x8Bit ! 8: */ ! 9: ! 10: static inline void putpixel(SDL_Surface * surface, Uint16 x, Uint16 y, Uint32 col) ! 11: ! 12: { ! 13: ! 14: /* Nombre de bits par pixels de la surface d'écran */ ! 15: Uint8 bpp = surface->format->BytesPerPixel; ! 16: /* Pointeur vers le pixel à remplacer (pitch correspond à la taille ! 17: d'une ligne d'écran, c'est à dire (longueur * bitsParPixel) ! 18: pour la plupart des cas) */ ! 19: ! 20: Uint8 * p1 = ((Uint8 *)surface->pixels) + y * surface->pitch + x * bpp; ! 21: ! 22: ! 23: Uint32 color = colors[col]; ! 24: ! 25: switch(bpp) { ! 26: case 1: ! 27: ! 28: *p1 = color; ! 29: ! 30: break; ! 31: ! 32: case 2: ! 33: ! 34: *(Uint16 *)p1 = color; ! 35: ! 36: break; ! 37: ! 38: case 3: ! 39: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { ! 40: ! 41: p1[0] = (color >> 16) & 0xff; ! 42: p1[1] = (color >> 8) & 0xff; ! 43: p1[2] = color & 0xff; ! 44: ! 45: } else { ! 46: ! 47: p1[0] = color & 0xff; ! 48: p1[1] = (color >> 8) & 0xff; ! 49: p1[2] = (color >> 16) & 0xff; ! 50: ! 51: } ! 52: break; ! 53: ! 54: case 4: ! 55: ! 56: *(Uint32 *)p1 = color; ! 57: break; ! 58: } ! 59: ! 60: } ! 61: ! 62: ! 63: static void ConvertHighRes_640x8Bit(void) ! 64: { ! 65: int y, x; ! 66: int col; ! 67: static int first=1; ! 68: ! 69: if (first) { ! 70: first=0; ! 71: for (x=0;x<4;x++) ! 72: colors[x] = SDL_MapRGB(sdlscrn->format, sdlColors[x].r, sdlColors[x].g, sdlColors[x].b); ! 73: } ! 74: ! 75: for (y = 0; y < 832; y++) ! 76: { ! 77: ! 78: for (x = 0; x < 1120; x++) ! 79: { ! 80: switch (x&0x3) ! 81: { ! 82: case 0x0: ! 83: col=(NEXTVideo[(x/4)+y*288]&0xC0)>>6; ! 84: // col=(NEXTVideo[(x/4)+y*280]&0xC0)>>6; ! 85: break; ! 86: case 0x1: ! 87: col=(NEXTVideo[(x/4)+y*288]&0x30)>>4; ! 88: // col=(NEXTVideo[(x/4)+y*280]&0x30)>>4; ! 89: break; ! 90: case 0x2: ! 91: col=(NEXTVideo[(x/4)+y*288]&0x0C)>>2; ! 92: // col=(NEXTVideo[(x/4)+y*280]&0x0C)>>2; ! 93: break; ! 94: case 0x3: ! 95: col=(NEXTVideo[(x/4)+y*288]&0x03); ! 96: // col=(NEXTVideo[(x/4)+y*280]&0x03); ! 97: break; ! 98: } ! 99: putpixel(sdlscrn,x,y,col); ! 100: } ! 101: } ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.