--- hatari/src/convert/spec640x32.c 2019/04/01 07:13:52 1.1 +++ hatari/src/convert/spec640x32.c 2019/04/01 07:14:20 1.1.1.2 @@ -40,7 +40,6 @@ static void ConvertSpec512_640x32Bit(voi ecx = *(edi+1); #if SDL_BYTEORDER == SDL_LIL_ENDIAN - /* Convert planes to byte indices - as works in wrong order store to workspace so can read back in order! */ LOW_BUILD_PIXELS_0 ; /* Generate 'ecx' as pixels [4,5,6,7] */ pixelspace[1] = ecx; @@ -50,55 +49,7 @@ static void ConvertSpec512_640x32Bit(voi pixelspace[0] = ecx; LOW_BUILD_PIXELS_3 ; /* Generate 'ecx' as pixels [8,9,10,11] */ pixelspace[2] = ecx; - - /* And plot, the Spec512 is offset by 1 pixel and works on 'chunks' of 4 pixels */ - /* So, we plot 1_4_4_3 to give 16 pixels, changing palette between */ - /* (last one is used for first of next 16-pixels) */ - if (!bScrDoubleY) /* Double on Y? */ - { - ecx = pixelspace[0]; - PLOT_SPEC512_LEFT_LOW_640_32BIT(0); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 1); - PLOT_SPEC512_MID_640_32BIT(2); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 5); - PLOT_SPEC512_MID_640_32BIT(10); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 9); - PLOT_SPEC512_MID_640_32BIT(18); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 13); - PLOT_SPEC512_END_LOW_640_32BIT(26); - } - else - { - ecx = pixelspace[0]; - PLOT_SPEC512_LEFT_LOW_640_32BIT_DOUBLE_Y(0); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 1); - PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(2); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 5); - PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(10) ; - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 9); - PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(18); - Spec512_UpdatePaletteSpan(); - - ecx = *(Uint32 *)(((Uint8 *)pixelspace) + 13); - PLOT_SPEC512_END_LOW_640_32BIT_DOUBLE_Y(26); - } - #else - LOW_BUILD_PIXELS_0 ; pixelspace[3] = ecx; LOW_BUILD_PIXELS_1 ; @@ -107,26 +58,29 @@ static void ConvertSpec512_640x32Bit(voi pixelspace[2] = ecx; LOW_BUILD_PIXELS_3 ; pixelspace[0] = ecx; - +#endif + /* And plot, the Spec512 is offset by 1 pixel and works on 'chunks' of 4 pixels */ + /* So, we plot 1_4_4_3 to give 16 pixels, changing palette between */ + /* (last one is used for first of next 16-pixels) */ if (!bScrDoubleY) /* Double on Y? */ { ecx = pixelspace[0]; PLOT_SPEC512_LEFT_LOW_640_32BIT(0); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[0] >> 8) | (((Uint8)pixelspace[1])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 1); PLOT_SPEC512_MID_640_32BIT(2); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[1] >> 8) | (((Uint8)pixelspace[2])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 5); PLOT_SPEC512_MID_640_32BIT(10); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[2] >> 8) | (((Uint8)pixelspace[3])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 9); PLOT_SPEC512_MID_640_32BIT(18); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[3] >> 8); + ecx = GET_SPEC512_OFFSET_FINAL_PIXELS(pixelspace); PLOT_SPEC512_END_LOW_640_32BIT(26); } else @@ -135,24 +89,22 @@ static void ConvertSpec512_640x32Bit(voi PLOT_SPEC512_LEFT_LOW_640_32BIT_DOUBLE_Y(0); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[0] >> 8) | (((Uint8)pixelspace[1])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 1); PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(2); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[1] >> 8) | (((Uint8)pixelspace[2])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 5); PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(10); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[2] >> 8) | (((Uint8)pixelspace[3])<<24); + ecx = GET_SPEC512_OFFSET_PIXELS(pixelspace, 9); PLOT_SPEC512_MID_640_32BIT_DOUBLE_Y(18); Spec512_UpdatePaletteSpan(); - ecx = (pixelspace[3] >> 8); + ecx = GET_SPEC512_OFFSET_FINAL_PIXELS(pixelspace); PLOT_SPEC512_END_LOW_640_32BIT_DOUBLE_Y(26); } -#endif - esi += 32; /* Next PC pixels */ edi += 2; /* Next ST pixels */ ebp += 2; /* Next ST copy pixels */