|
|
1.1.1.2 root 1: /*
2: Hatari - med640x8.c
1.1.1.5 root 3:
1.1.1.2 root 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.
1.1 root 6:
1.1.1.2 root 7: Screen conversion, Medium Res to 640x8Bit
8: */
1.1 root 9:
1.1.1.3 root 10: static void ConvertMediumRes_640x8Bit(void)
1.1 root 11: {
1.1.1.5 root 12: Uint32 *edi, *ebp;
13: Uint32 *esi;
14: Uint32 eax;
15: int y;
16:
17: Convert_StartFrame(); /* Start frame, track palettes */
18:
19: for (y = STScreenStartHorizLine; y < STScreenEndHorizLine; y++)
20: {
21:
22: eax = STScreenLineOffset[y] + STScreenLeftSkipBytes; /* Offset for this line + Amount to skip on left hand side */
23: edi = (Uint32 *)((Uint8 *)pSTScreen + eax); /* ST format screen 4-plane 16 colors */
24: ebp = (Uint32 *)((Uint8 *)pSTScreenCopy + eax); /* Previous ST format screen */
25: esi = (Uint32 *)pPCScreenDest; /* PC format screen */
26:
27: if (AdjustLinePaletteRemap(y) & 0x00030000) /* Change palette table */
28: Line_ConvertMediumRes_640x8Bit(edi, ebp, esi, eax);
29: else
30: Line_ConvertLowRes_640x8Bit(edi, ebp, esi, eax);
1.1.1.2 root 31:
1.1.1.5 root 32: pPCScreenDest = (((Uint8 *)pPCScreenDest)+PCScreenBytesPerLine*2); /* Offset to next line */
33: }
1.1 root 34: }
1.1.1.2 root 35:
36:
1.1.1.3 root 37: static void Line_ConvertMediumRes_640x8Bit(Uint32 *edi, Uint32 *ebp, Uint32 *esi, Uint32 eax)
1.1 root 38: {
1.1.1.5 root 39: Uint32 ebx, ecx;
40: int x, update, Screen4BytesPerLine;
1.1.1.2 root 41:
1.1.1.5 root 42: x = STScreenWidthBytes >> 2; /* Amount to draw across in 16-pixels (4 bytes) */
43: Screen4BytesPerLine = PCScreenBytesPerLine / 4;
44: update = ScrUpdateFlag & PALETTEMASK_UPDATEMASK;
1.1 root 45:
1.1.1.5 root 46: do /* x-loop */
47: {
1.1.1.2 root 48:
1.1.1.5 root 49: /* Do 16 pixels at one time */
50: ebx = *edi;
1.1.1.2 root 51:
1.1.1.5 root 52: if (update || ebx != *ebp) /* Does differ? */
53: {
54: /* copy word */
1.1.1.2 root 55:
1.1.1.6 root 56: bScreenContentsChanged = true;
1.1.1.2 root 57:
58: #if SDL_BYTEORDER == SDL_BIG_ENDIAN
1.1.1.5 root 59: /* Plot in 'right-order' on big endian systems */
60: if (!bScrDoubleY) /* Double on Y? */
61: {
1.1.1.7 ! root 62: MED_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [12,13,14,15] */
1.1.1.5 root 63: PLOT_MED_640_8BIT(3) ;
1.1.1.7 ! root 64: MED_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [4,5,6,7] */
1.1.1.5 root 65: PLOT_MED_640_8BIT(1) ;
1.1.1.7 ! root 66: MED_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [8,9,10,11] */
1.1.1.5 root 67: PLOT_MED_640_8BIT(2) ;
1.1.1.7 ! root 68: MED_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [0,1,2,3] */
1.1.1.5 root 69: PLOT_MED_640_8BIT(0) ;
70: }
71: else
72: {
1.1.1.7 ! root 73: MED_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [12,13,14,15] */
1.1.1.5 root 74: PLOT_MED_640_8BIT_DOUBLE_Y(3) ;
1.1.1.7 ! root 75: MED_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [4,5,6,7] */
1.1.1.5 root 76: PLOT_MED_640_8BIT_DOUBLE_Y(1) ;
1.1.1.7 ! root 77: MED_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [8,9,10,11] */
1.1.1.5 root 78: PLOT_MED_640_8BIT_DOUBLE_Y(2) ;
1.1.1.7 ! root 79: MED_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [0,1,2,3] */
1.1.1.5 root 80: PLOT_MED_640_8BIT_DOUBLE_Y(0) ;
81: }
1.1.1.2 root 82: #else
1.1.1.5 root 83: /* Plot in 'wrong-order', as ebx is 68000 endian */
84: if (!bScrDoubleY) /* Double on Y? */
85: {
86: MED_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [4,5,6,7] */
87: PLOT_MED_640_8BIT(1) ;
88: MED_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [12,13,14,15] */
89: PLOT_MED_640_8BIT(3) ;
90: MED_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [0,1,2,3] */
91: PLOT_MED_640_8BIT(0) ;
92: MED_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [8,9,10,11] */
93: PLOT_MED_640_8BIT(2) ;
94: }
95: else
96: {
97: MED_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [4,5,6,7] */
98: PLOT_MED_640_8BIT_DOUBLE_Y(1) ;
99: MED_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [12,13,14,15] */
100: PLOT_MED_640_8BIT_DOUBLE_Y(3) ;
101: MED_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [0,1,2,3] */
102: PLOT_MED_640_8BIT_DOUBLE_Y(0) ;
103: MED_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [8,9,10,11] */
104: PLOT_MED_640_8BIT_DOUBLE_Y(2) ;
105: }
1.1.1.2 root 106: #endif
1.1.1.5 root 107: }
108:
109: esi += 4; /* Next PC pixels */
110: edi += 1; /* Next ST pixels */
111: ebp += 1; /* Next ST copy pixels */
1.1.1.2 root 112:
1.1.1.5 root 113: }
114: while (--x); /* Loop on X */
1.1 root 115: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.