Revision b115bb3f
b/hw/ssd0303.c | ||
---|---|---|
203 | 203 |
int dest_width; |
204 | 204 |
uint8_t mask; |
205 | 205 |
|
206 |
if (s->redraw) { |
|
207 |
switch (s->ds->depth) { |
|
208 |
case 0: |
|
209 |
return; |
|
210 |
case 15: |
|
211 |
dest_width = 2; |
|
212 |
break; |
|
213 |
case 16: |
|
214 |
dest_width = 2; |
|
215 |
break; |
|
216 |
case 24: |
|
217 |
dest_width = 3; |
|
218 |
break; |
|
219 |
case 32: |
|
220 |
dest_width = 4; |
|
221 |
break; |
|
222 |
default: |
|
223 |
BADF("Bad color depth\n"); |
|
224 |
return; |
|
225 |
} |
|
226 |
dest_width *= MAGNIFY; |
|
227 |
memset(colortab, 0xff, dest_width); |
|
228 |
memset(colortab + dest_width, 0, dest_width); |
|
229 |
if (s->flash) { |
|
230 |
colors[0] = colortab; |
|
231 |
colors[1] = colortab; |
|
232 |
} else if (s->inverse) { |
|
233 |
colors[0] = colortab; |
|
234 |
colors[1] = colortab + dest_width; |
|
235 |
} else { |
|
236 |
colors[0] = colortab + dest_width; |
|
237 |
colors[1] = colortab; |
|
206 |
if (!s->redraw) |
|
207 |
return; |
|
208 |
|
|
209 |
switch (s->ds->depth) { |
|
210 |
case 0: |
|
211 |
return; |
|
212 |
case 15: |
|
213 |
dest_width = 2; |
|
214 |
break; |
|
215 |
case 16: |
|
216 |
dest_width = 2; |
|
217 |
break; |
|
218 |
case 24: |
|
219 |
dest_width = 3; |
|
220 |
break; |
|
221 |
case 32: |
|
222 |
dest_width = 4; |
|
223 |
break; |
|
224 |
default: |
|
225 |
BADF("Bad color depth\n"); |
|
226 |
return; |
|
227 |
} |
|
228 |
dest_width *= MAGNIFY; |
|
229 |
memset(colortab, 0xff, dest_width); |
|
230 |
memset(colortab + dest_width, 0, dest_width); |
|
231 |
if (s->flash) { |
|
232 |
colors[0] = colortab; |
|
233 |
colors[1] = colortab; |
|
234 |
} else if (s->inverse) { |
|
235 |
colors[0] = colortab; |
|
236 |
colors[1] = colortab + dest_width; |
|
237 |
} else { |
|
238 |
colors[0] = colortab + dest_width; |
|
239 |
colors[1] = colortab; |
|
240 |
} |
|
241 |
dest = s->ds->data; |
|
242 |
for (y = 0; y < 16; y++) { |
|
243 |
line = (y + s->start_line) & 63; |
|
244 |
src = s->framebuffer + 132 * (line >> 3) + 36; |
|
245 |
mask = 1 << (line & 7); |
|
246 |
for (x = 0; x < 96; x++) { |
|
247 |
memcpy(dest, colors[(*src & mask) != 0], dest_width); |
|
248 |
dest += dest_width; |
|
249 |
src++; |
|
238 | 250 |
} |
239 |
dest = s->ds->data; |
|
240 |
for (y = 0; y < 16; y++) { |
|
241 |
line = (y + s->start_line) & 63; |
|
242 |
src = s->framebuffer + 132 * (line >> 3) + 36; |
|
243 |
mask = 1 << (line & 7); |
|
244 |
for (x = 0; x < 96; x++) { |
|
245 |
memcpy(dest, colors[(*src & mask) != 0], dest_width); |
|
246 |
dest += dest_width; |
|
247 |
src++; |
|
248 |
} |
|
249 |
for (x = 1; x < MAGNIFY; x++) { |
|
250 |
memcpy(dest, dest - dest_width * 96, dest_width * 96); |
|
251 |
dest += dest_width * 96; |
|
252 |
} |
|
251 |
for (x = 1; x < MAGNIFY; x++) { |
|
252 |
memcpy(dest, dest - dest_width * 96, dest_width * 96); |
|
253 |
dest += dest_width * 96; |
|
253 | 254 |
} |
254 | 255 |
} |
256 |
s->redraw = 0; |
|
255 | 257 |
dpy_update(s->ds, 0, 0, 96 * MAGNIFY, 16 * MAGNIFY); |
256 | 258 |
} |
257 | 259 |
|
b/hw/ssd0323.c | ||
---|---|---|
184 | 184 |
char *p; |
185 | 185 |
int dest_width; |
186 | 186 |
|
187 |
if (s->redraw) { |
|
187 |
if (!s->redraw) |
|
188 |
return; |
|
189 |
|
|
190 |
switch (s->ds->depth) { |
|
191 |
case 0: |
|
192 |
return; |
|
193 |
case 15: |
|
194 |
dest_width = 2; |
|
195 |
break; |
|
196 |
case 16: |
|
197 |
dest_width = 2; |
|
198 |
break; |
|
199 |
case 24: |
|
200 |
dest_width = 3; |
|
201 |
break; |
|
202 |
case 32: |
|
203 |
dest_width = 4; |
|
204 |
break; |
|
205 |
default: |
|
206 |
BADF("Bad color depth\n"); |
|
207 |
return; |
|
208 |
} |
|
209 |
p = colortab; |
|
210 |
for (i = 0; i < 16; i++) { |
|
211 |
int n; |
|
212 |
colors[i] = p; |
|
188 | 213 |
switch (s->ds->depth) { |
189 |
case 0: |
|
190 |
return; |
|
191 | 214 |
case 15: |
192 |
dest_width = 2; |
|
215 |
n = i * 2 + (i >> 3); |
|
216 |
p[0] = n | (n << 5); |
|
217 |
p[1] = (n << 2) | (n >> 3); |
|
193 | 218 |
break; |
194 | 219 |
case 16: |
195 |
dest_width = 2; |
|
220 |
n = i * 2 + (i >> 3); |
|
221 |
p[0] = n | (n << 6) | ((n << 1) & 0x20); |
|
222 |
p[1] = (n << 3) | (n >> 2); |
|
196 | 223 |
break; |
197 | 224 |
case 24: |
198 |
dest_width = 3; |
|
199 |
break; |
|
200 | 225 |
case 32: |
201 |
dest_width = 4; |
|
226 |
n = (i << 4) | i; |
|
227 |
p[0] = p[1] = p[2] = n; |
|
202 | 228 |
break; |
203 | 229 |
default: |
204 | 230 |
BADF("Bad color depth\n"); |
205 | 231 |
return; |
206 | 232 |
} |
207 |
p = colortab; |
|
208 |
for (i = 0; i < 16; i++) { |
|
209 |
int n; |
|
210 |
colors[i] = p; |
|
211 |
switch (s->ds->depth) { |
|
212 |
case 15: |
|
213 |
n = i * 2 + (i >> 3); |
|
214 |
p[0] = n | (n << 5); |
|
215 |
p[1] = (n << 2) | (n >> 3); |
|
216 |
break; |
|
217 |
case 16: |
|
218 |
n = i * 2 + (i >> 3); |
|
219 |
p[0] = n | (n << 6) | ((n << 1) & 0x20); |
|
220 |
p[1] = (n << 3) | (n >> 2); |
|
221 |
break; |
|
222 |
case 24: |
|
223 |
case 32: |
|
224 |
n = (i << 4) | i; |
|
225 |
p[0] = p[1] = p[2] = n; |
|
226 |
break; |
|
227 |
default: |
|
228 |
BADF("Bad color depth\n"); |
|
229 |
return; |
|
230 |
} |
|
231 |
p += dest_width; |
|
232 |
} |
|
233 |
/* TODO: Implement row/column remapping. */ |
|
234 |
dest = s->ds->data; |
|
235 |
for (y = 0; y < 64; y++) { |
|
236 |
line = y; |
|
237 |
src = s->framebuffer + 64 * line; |
|
238 |
for (x = 0; x < 64; x++) { |
|
239 |
int val; |
|
240 |
val = *src >> 4; |
|
241 |
for (i = 0; i < MAGNIFY; i++) { |
|
242 |
memcpy(dest, colors[val], dest_width); |
|
243 |
dest += dest_width; |
|
244 |
} |
|
245 |
val = *src & 0xf; |
|
246 |
for (i = 0; i < MAGNIFY; i++) { |
|
247 |
memcpy(dest, colors[val], dest_width); |
|
248 |
dest += dest_width; |
|
249 |
} |
|
250 |
src++; |
|
233 |
p += dest_width; |
|
234 |
} |
|
235 |
/* TODO: Implement row/column remapping. */ |
|
236 |
dest = s->ds->data; |
|
237 |
for (y = 0; y < 64; y++) { |
|
238 |
line = y; |
|
239 |
src = s->framebuffer + 64 * line; |
|
240 |
for (x = 0; x < 64; x++) { |
|
241 |
int val; |
|
242 |
val = *src >> 4; |
|
243 |
for (i = 0; i < MAGNIFY; i++) { |
|
244 |
memcpy(dest, colors[val], dest_width); |
|
245 |
dest += dest_width; |
|
251 | 246 |
} |
252 |
for (i = 1; i < MAGNIFY; i++) {
|
|
253 |
memcpy(dest, dest - dest_width * MAGNIFY * 128,
|
|
254 |
dest_width * 128 * MAGNIFY);
|
|
255 |
dest += dest_width * 128 * MAGNIFY;
|
|
247 |
val = *src & 0xf;
|
|
248 |
for (i = 0; i < MAGNIFY; i++) {
|
|
249 |
memcpy(dest, colors[val], dest_width);
|
|
250 |
dest += dest_width; |
|
256 | 251 |
} |
252 |
src++; |
|
253 |
} |
|
254 |
for (i = 1; i < MAGNIFY; i++) { |
|
255 |
memcpy(dest, dest - dest_width * MAGNIFY * 128, |
|
256 |
dest_width * 128 * MAGNIFY); |
|
257 |
dest += dest_width * 128 * MAGNIFY; |
|
257 | 258 |
} |
258 | 259 |
} |
260 |
s->redraw = 0; |
|
259 | 261 |
dpy_update(s->ds, 0, 0, 128 * MAGNIFY, 64 * MAGNIFY); |
260 | 262 |
} |
261 | 263 |
|
Also available in: Unified diff