@@ -131,6 +131,7 @@ void emu_lcd_drawmem(void *output, void *data, void *data_end, uint32_t lcd_cont
131
131
if (!dat ) { goto draw_black ; }
132
132
133
133
if (mode < 4 ) {
134
+ const uint16_t * palette = lcd .palettes [bgr & 1 ];
134
135
uint_fast8_t bpp = 1u << mode ;
135
136
uint32_t mask = (1 << bpp ) - 1 ;
136
137
uint_fast8_t bi = bebo ^ (CEMU_BYTE_ORDER == CEMU_BIG_ENDIAN ) ? 0 : 24 ;
@@ -140,12 +141,8 @@ void emu_lcd_drawmem(void *output, void *data, void *data_end, uint32_t lcd_cont
140
141
uint_fast8_t bitpos = 32 ;
141
142
word = * dat ++ ;
142
143
do {
143
- color = lcd .palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ];
144
- color |= (uint32_t )lcd .palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ] << 16 ;
145
- color = lcd_bgr565swap (color , bgr );
144
+ color = palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ];
146
145
* out ++ = lcd_rgb565out (color );
147
- if (out == out_end ) break ;
148
- * out ++ = lcd_rgb565out (color >> 16 );
149
146
} while (bitpos && out != out_end );
150
147
} while (dat < dat_end );
151
148
@@ -309,18 +306,16 @@ static uint32_t lcd_words(uint8_t words) {
309
306
}
310
307
311
308
default : {
309
+ const uint16_t * palette = lcd .palettes [bgr & 1 ];
312
310
uint_fast8_t bpp = 1 << lcd .LCDBPP ;
313
311
uint_fast8_t mask = (1 << bpp ) - 1 ;
314
312
uint_fast8_t bi = (lcd .BEBO ^ (CEMU_BYTE_ORDER == CEMU_BIG_ENDIAN ) ? 0 : 24 ) ^ (lcd .BEPO ? 0 : 8 - bpp );
315
313
do {
316
314
uint_fast8_t bitpos = 32 ;
317
315
uint32_t word = * dat ++ ;
318
316
do {
319
- uint32_t pixel = lcd .palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ];
320
- pixel |= (uint32_t )lcd .palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ] << 16 ;
321
- pixel = lcd_bgr565swap (pixel , bgr );
317
+ uint16_t pixel = palette [word >> ((bitpos -= bpp ) ^ bi ) & mask ];
322
318
ticks = lcd_process_pixel (ticks , pixel );
323
- ticks = lcd_process_pixel (ticks , pixel >> 16 );
324
319
} while (bitpos );
325
320
} while (-- words );
326
321
break ;
@@ -687,7 +682,9 @@ static void lcd_write(const uint16_t pio, const uint8_t value, bool poke) {
687
682
/* Convert to RGB565 in native endianness */
688
683
paletteIndex >>= 1 ;
689
684
uint16_t color = lcd .paletteBytes [paletteIndex * 2 ] | (lcd .paletteBytes [paletteIndex * 2 + 1 ] << 8 );
690
- lcd .palette [paletteIndex ] = color + (color & 0xFFE0 ) + (color >> 10 & 0x0020 );
685
+ uint16_t bgr565 = color + (color & 0xFFE0 ) + (color >> 10 & 0x0020 );
686
+ lcd .palettes [0 ][paletteIndex ] = bgr565 ;
687
+ lcd .palettes [1 ][paletteIndex ] = lcd_bgr565swap (bgr565 , 0x1F );
691
688
}
692
689
} else if (index < 0xC00 ) {
693
690
if (index >= 0x800 ) {
0 commit comments