mirror of https://github.com/xqemu/xqemu.git
Eliminate spurous screen updates.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4857 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
28e1071183
commit
b115bb3feb
94
hw/ssd0303.c
94
hw/ssd0303.c
|
@ -203,55 +203,57 @@ static void ssd0303_update_display(void *opaque)
|
||||||
int dest_width;
|
int dest_width;
|
||||||
uint8_t mask;
|
uint8_t mask;
|
||||||
|
|
||||||
if (s->redraw) {
|
if (!s->redraw)
|
||||||
switch (s->ds->depth) {
|
return;
|
||||||
case 0:
|
|
||||||
return;
|
switch (s->ds->depth) {
|
||||||
case 15:
|
case 0:
|
||||||
dest_width = 2;
|
return;
|
||||||
break;
|
case 15:
|
||||||
case 16:
|
dest_width = 2;
|
||||||
dest_width = 2;
|
break;
|
||||||
break;
|
case 16:
|
||||||
case 24:
|
dest_width = 2;
|
||||||
dest_width = 3;
|
break;
|
||||||
break;
|
case 24:
|
||||||
case 32:
|
dest_width = 3;
|
||||||
dest_width = 4;
|
break;
|
||||||
break;
|
case 32:
|
||||||
default:
|
dest_width = 4;
|
||||||
BADF("Bad color depth\n");
|
break;
|
||||||
return;
|
default:
|
||||||
|
BADF("Bad color depth\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dest_width *= MAGNIFY;
|
||||||
|
memset(colortab, 0xff, dest_width);
|
||||||
|
memset(colortab + dest_width, 0, dest_width);
|
||||||
|
if (s->flash) {
|
||||||
|
colors[0] = colortab;
|
||||||
|
colors[1] = colortab;
|
||||||
|
} else if (s->inverse) {
|
||||||
|
colors[0] = colortab;
|
||||||
|
colors[1] = colortab + dest_width;
|
||||||
|
} else {
|
||||||
|
colors[0] = colortab + dest_width;
|
||||||
|
colors[1] = colortab;
|
||||||
|
}
|
||||||
|
dest = s->ds->data;
|
||||||
|
for (y = 0; y < 16; y++) {
|
||||||
|
line = (y + s->start_line) & 63;
|
||||||
|
src = s->framebuffer + 132 * (line >> 3) + 36;
|
||||||
|
mask = 1 << (line & 7);
|
||||||
|
for (x = 0; x < 96; x++) {
|
||||||
|
memcpy(dest, colors[(*src & mask) != 0], dest_width);
|
||||||
|
dest += dest_width;
|
||||||
|
src++;
|
||||||
}
|
}
|
||||||
dest_width *= MAGNIFY;
|
for (x = 1; x < MAGNIFY; x++) {
|
||||||
memset(colortab, 0xff, dest_width);
|
memcpy(dest, dest - dest_width * 96, dest_width * 96);
|
||||||
memset(colortab + dest_width, 0, dest_width);
|
dest += dest_width * 96;
|
||||||
if (s->flash) {
|
|
||||||
colors[0] = colortab;
|
|
||||||
colors[1] = colortab;
|
|
||||||
} else if (s->inverse) {
|
|
||||||
colors[0] = colortab;
|
|
||||||
colors[1] = colortab + dest_width;
|
|
||||||
} else {
|
|
||||||
colors[0] = colortab + dest_width;
|
|
||||||
colors[1] = colortab;
|
|
||||||
}
|
|
||||||
dest = s->ds->data;
|
|
||||||
for (y = 0; y < 16; y++) {
|
|
||||||
line = (y + s->start_line) & 63;
|
|
||||||
src = s->framebuffer + 132 * (line >> 3) + 36;
|
|
||||||
mask = 1 << (line & 7);
|
|
||||||
for (x = 0; x < 96; x++) {
|
|
||||||
memcpy(dest, colors[(*src & mask) != 0], dest_width);
|
|
||||||
dest += dest_width;
|
|
||||||
src++;
|
|
||||||
}
|
|
||||||
for (x = 1; x < MAGNIFY; x++) {
|
|
||||||
memcpy(dest, dest - dest_width * 96, dest_width * 96);
|
|
||||||
dest += dest_width * 96;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s->redraw = 0;
|
||||||
dpy_update(s->ds, 0, 0, 96 * MAGNIFY, 16 * MAGNIFY);
|
dpy_update(s->ds, 0, 0, 96 * MAGNIFY, 16 * MAGNIFY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
114
hw/ssd0323.c
114
hw/ssd0323.c
|
@ -184,78 +184,80 @@ static void ssd0323_update_display(void *opaque)
|
||||||
char *p;
|
char *p;
|
||||||
int dest_width;
|
int dest_width;
|
||||||
|
|
||||||
if (s->redraw) {
|
if (!s->redraw)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (s->ds->depth) {
|
||||||
|
case 0:
|
||||||
|
return;
|
||||||
|
case 15:
|
||||||
|
dest_width = 2;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
dest_width = 2;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
dest_width = 3;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
dest_width = 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
BADF("Bad color depth\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
p = colortab;
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
int n;
|
||||||
|
colors[i] = p;
|
||||||
switch (s->ds->depth) {
|
switch (s->ds->depth) {
|
||||||
case 0:
|
|
||||||
return;
|
|
||||||
case 15:
|
case 15:
|
||||||
dest_width = 2;
|
n = i * 2 + (i >> 3);
|
||||||
|
p[0] = n | (n << 5);
|
||||||
|
p[1] = (n << 2) | (n >> 3);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
dest_width = 2;
|
n = i * 2 + (i >> 3);
|
||||||
|
p[0] = n | (n << 6) | ((n << 1) & 0x20);
|
||||||
|
p[1] = (n << 3) | (n >> 2);
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
dest_width = 3;
|
|
||||||
break;
|
|
||||||
case 32:
|
case 32:
|
||||||
dest_width = 4;
|
n = (i << 4) | i;
|
||||||
|
p[0] = p[1] = p[2] = n;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
BADF("Bad color depth\n");
|
BADF("Bad color depth\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
p = colortab;
|
p += dest_width;
|
||||||
for (i = 0; i < 16; i++) {
|
}
|
||||||
int n;
|
/* TODO: Implement row/column remapping. */
|
||||||
colors[i] = p;
|
dest = s->ds->data;
|
||||||
switch (s->ds->depth) {
|
for (y = 0; y < 64; y++) {
|
||||||
case 15:
|
line = y;
|
||||||
n = i * 2 + (i >> 3);
|
src = s->framebuffer + 64 * line;
|
||||||
p[0] = n | (n << 5);
|
for (x = 0; x < 64; x++) {
|
||||||
p[1] = (n << 2) | (n >> 3);
|
int val;
|
||||||
break;
|
val = *src >> 4;
|
||||||
case 16:
|
for (i = 0; i < MAGNIFY; i++) {
|
||||||
n = i * 2 + (i >> 3);
|
memcpy(dest, colors[val], dest_width);
|
||||||
p[0] = n | (n << 6) | ((n << 1) & 0x20);
|
dest += dest_width;
|
||||||
p[1] = (n << 3) | (n >> 2);
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
case 32:
|
|
||||||
n = (i << 4) | i;
|
|
||||||
p[0] = p[1] = p[2] = n;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
BADF("Bad color depth\n");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
p += dest_width;
|
val = *src & 0xf;
|
||||||
|
for (i = 0; i < MAGNIFY; i++) {
|
||||||
|
memcpy(dest, colors[val], dest_width);
|
||||||
|
dest += dest_width;
|
||||||
|
}
|
||||||
|
src++;
|
||||||
}
|
}
|
||||||
/* TODO: Implement row/column remapping. */
|
for (i = 1; i < MAGNIFY; i++) {
|
||||||
dest = s->ds->data;
|
memcpy(dest, dest - dest_width * MAGNIFY * 128,
|
||||||
for (y = 0; y < 64; y++) {
|
dest_width * 128 * MAGNIFY);
|
||||||
line = y;
|
dest += dest_width * 128 * MAGNIFY;
|
||||||
src = s->framebuffer + 64 * line;
|
|
||||||
for (x = 0; x < 64; x++) {
|
|
||||||
int val;
|
|
||||||
val = *src >> 4;
|
|
||||||
for (i = 0; i < MAGNIFY; i++) {
|
|
||||||
memcpy(dest, colors[val], dest_width);
|
|
||||||
dest += dest_width;
|
|
||||||
}
|
|
||||||
val = *src & 0xf;
|
|
||||||
for (i = 0; i < MAGNIFY; i++) {
|
|
||||||
memcpy(dest, colors[val], dest_width);
|
|
||||||
dest += dest_width;
|
|
||||||
}
|
|
||||||
src++;
|
|
||||||
}
|
|
||||||
for (i = 1; i < MAGNIFY; i++) {
|
|
||||||
memcpy(dest, dest - dest_width * MAGNIFY * 128,
|
|
||||||
dest_width * 128 * MAGNIFY);
|
|
||||||
dest += dest_width * 128 * MAGNIFY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s->redraw = 0;
|
||||||
dpy_update(s->ds, 0, 0, 128 * MAGNIFY, 64 * MAGNIFY);
|
dpy_update(s->ds, 0, 0, 128 * MAGNIFY, 64 * MAGNIFY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue