|
|
1.1.1.2 root 1: /* Screen Conversion, Low Res to 320x16Bit */
1.1 root 2:
3: void ConvertLowRes_320x16Bit(void)
4: {
1.1.1.2 root 5: Uint32 *edi, *ebp;
6: Uint16 *esi;
1.1.1.3 ! root 7: Uint32 eax, edx;
! 8: register Uint32 ebx, ecx;
1.1 root 9:
1.1.1.2 root 10: Convert_StartFrame(); /* Start frame, track palettes */
11: ScrY = STScreenStartHorizLine; /* Starting line in ST screen */
1.1 root 12:
13: do /* y-loop */
14: {
15: eax = STScreenLineOffset[ScrY] + STScreenLeftSkipBytes; /* Offset for this line + Amount to skip on left hand side */
1.1.1.2 root 16: edi = (Uint32 *)((Uint8 *)pSTScreen + eax); /* ST format screen 4-plane 16 colours */
17: ebp = (Uint32 *)((Uint8 *)pSTScreenCopy + eax); /* Previous ST format screen */
1.1.1.3 ! root 18: esi = (Uint16 *)pPCScreenDest; /* PC format screen */
1.1 root 19:
20: AdjustLinePaletteRemap();
21:
1.1.1.3 ! root 22: ScrX=STScreenWidthBytes>>3; /* Amount to draw across in 16-pixels(8 bytes) */
1.1 root 23:
24: do /* x-loop */
25: {
26: /* Do 16 pixels at one time */
27: ebx=*edi;
28: ecx=*(edi+1);
29:
1.1.1.3 ! root 30: if( (ScrUpdateFlag&0xe0000000) || ebx!=*ebp || ecx!=*(ebp+1) ) /* Does differ? */
! 31: { /* copy word */
1.1 root 32:
33: bScreenContentsChanged=TRUE;
34:
1.1.1.2 root 35: #if SDL_BYTEORDER == SDL_BIG_ENDIAN
1.1 root 36: /* Plot pixels */
37: LOW_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [4,5,6,7] */
38: PLOT_LOW_320_16BIT(12) ;
39: LOW_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [12,13,14,15] */
40: PLOT_LOW_320_16BIT(4) ;
41: LOW_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [0,1,2,3] */
42: PLOT_LOW_320_16BIT(8) ;
43: LOW_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [8,9,10,11] */
44: PLOT_LOW_320_16BIT(0) ;
45: #else
46: /* Plot pixels */
47: LOW_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [4,5,6,7] */
48: PLOT_LOW_320_16BIT(4) ;
49: LOW_BUILD_PIXELS_1 ; /* Generate 'ecx' as pixels [12,13,14,15] */
50: PLOT_LOW_320_16BIT(12) ;
51: LOW_BUILD_PIXELS_2 ; /* Generate 'ecx' as pixels [0,1,2,3] */
52: PLOT_LOW_320_16BIT(0) ;
53: LOW_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [8,9,10,11] */
54: PLOT_LOW_320_16BIT(8) ;
55: #endif
56: }
57:
58: esi += 16; /* Next PC pixels */
59: edi += 2; /* Next ST pixels */
60: ebp += 2; /* Next ST copy pixels */
61: }
62: while( --ScrX ); /* Loop on X */
63:
1.1.1.3 ! root 64: pPCScreenDest = (void *)(((Uint8 *)pPCScreenDest)+PCScreenBytesPerLine); /* Offset to next line */
1.1 root 65: ScrY += 1;
66: }
67: while( ScrY < STScreenEndHorizLine ); /* Loop on Y */
68:
69: }
70:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.