2
* Toshiba TC6393XB I/O Controller.
3
* Found in Sharp Zaurus SL-6000 (tosa) or some
4
* Toshiba e-Series PDAs.
6
* FB support code. Based on G364 fb emulator
8
* Copyright (c) 2007 Herv� Poussineau
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public License as
12
* published by the Free Software Foundation; either version 2 of
13
* the License, or (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License along
21
* with this program; if not, see <http://www.gnu.org/licenses/>.
25
# define SET_PIXEL(addr, color) *(uint8_t*)addr = color;
26
#elif BITS == 15 || BITS == 16
27
# define SET_PIXEL(addr, color) *(uint16_t*)addr = color;
29
# define SET_PIXEL(addr, color) \
30
addr[0] = color; addr[1] = (color) >> 8; addr[2] = (color) >> 16;
32
# define SET_PIXEL(addr, color) *(uint32_t*)addr = color;
34
# error unknown bit depth
38
static void glue(tc6393xb_draw_graphic, BITS)(TC6393xbState *s)
41
uint16_t *data_buffer;
42
uint8_t *data_display;
44
data_buffer = s->vram_ptr;
45
data_display = ds_get_data(s->ds);
46
for(i = 0; i < s->scr_height; i++) {
48
memcpy(data_display, data_buffer, s->scr_width * 2);
49
data_buffer += s->scr_width;
50
data_display += ds_get_linesize(s->ds);
53
for (j = 0; j < s->scr_width; j++, data_display += BITS / 8, data_buffer++) {
54
uint16_t color = *data_buffer;
55
uint32_t dest_color = glue(rgb_to_pixel, BITS)(
56
((color & 0xf800) * 0x108) >> 11,
57
((color & 0x7e0) * 0x41) >> 9,
58
((color & 0x1f) * 0x21) >> 2
60
SET_PIXEL(data_display, dest_color);