Rev 3742 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3742 | Rev 3745 | ||
|---|---|---|---|
| Line 217... | Line 217... | ||
| 217 | * |
217 | * |
| 218 | * |
218 | * |
| 219 | */ |
219 | */ |
| 220 | static void screen_scroll(void) |
220 | static void screen_scroll(void) |
| 221 | { |
221 | { |
| 222 | if (ylogo > 0) |
222 | if (ylogo > 0) { |
| 223 | logo_hide(); |
223 | logo_hide(); |
| - | 224 | return; |
|
| - | 225 | } |
|
| 224 | 226 | ||
| 225 | unsigned int row; |
227 | unsigned int row; |
| 226 | 228 | ||
| 227 | for (row = 0; row < rows; row++) { |
229 | for (row = 0; row < rows; row++) { |
| 228 | unsigned int y = ROW2Y(row); |
230 | unsigned int y = ROW2Y(row); |
| Line 230... | Line 232... | ||
| 230 | 232 | ||
| 231 | for (yd = 0; yd < FONT_SCANLINES; yd++) { |
233 | for (yd = 0; yd < FONT_SCANLINES; yd++) { |
| 232 | unsigned int x; |
234 | unsigned int x; |
| 233 | unsigned int col; |
235 | unsigned int col; |
| 234 | 236 | ||
| 235 | for (col = 0, x = 0; col < cols; col++, x += FONT_WIDTH) { |
237 | for (col = 0, x = 0; col < cols; col++, |
| - | 238 | x += FONT_WIDTH) { |
|
| 236 | uint8_t glyph; |
239 | uint8_t glyph; |
| 237 | 240 | ||
| 238 | if (row < rows - 1) { |
241 | if (row < rows - 1) { |
| - | 242 | if (backbuf[BB_POS(col, row)] == |
|
| 239 | if (backbuf[BB_POS(col, row)] == backbuf[BB_POS(col, row + 1)]) |
243 | backbuf[BB_POS(col, row + 1)]) |
| 240 | continue; |
244 | continue; |
| 241 | 245 | ||
| 242 | glyph = backbuf[BB_POS(col, row + 1)]; |
246 | glyph = backbuf[BB_POS(col, row + 1)]; |
| 243 | } else |
247 | } else |
| 244 | glyph = 0; |
248 | glyph = 0; |
| 245 | 249 | ||
| 246 | memcpy(&fb_addr[FB_POS(x, y + yd)], |
250 | memcpy(&fb_addr[FB_POS(x, y + yd)], |
| 247 | &glyphs[GLYPH_POS(glyph, yd)], glyphscanline); |
251 | &glyphs[GLYPH_POS(glyph, yd)], |
| - | 252 | glyphscanline); |
|
| 248 | } |
253 | } |
| 249 | } |
254 | } |
| 250 | } |
255 | } |
| 251 | 256 | ||
| 252 | memcpy(backbuf, backbuf + cols, cols * (rows - 1)); |
257 | memcpy(backbuf, backbuf + cols, cols * (rows - 1)); |
| Line 291... | Line 296... | ||
| 291 | position--; |
296 | position--; |
| 292 | break; |
297 | break; |
| 293 | case '\t': |
298 | case '\t': |
| 294 | cursor_remove(); |
299 | cursor_remove(); |
| 295 | do { |
300 | do { |
| 296 | glyph_draw((uint8_t) ' ', position % cols, position / cols); |
301 | glyph_draw((uint8_t) ' ', position % cols, |
| - | 302 | position / cols); |
|
| 297 | position++; |
303 | position++; |
| 298 | } while ((position % 8) && (position < cols * rows)); |
304 | } while ((position % 8) && (position < cols * rows)); |
| 299 | break; |
305 | break; |
| 300 | default: |
306 | default: |
| 301 | glyph_draw((uint8_t) ch, position % cols, position / cols); |
307 | glyph_draw((uint8_t) ch, position % cols, position / cols); |
| Line 333... | Line 339... | ||
| 333 | unsigned int y; |
339 | unsigned int y; |
| 334 | 340 | ||
| 335 | for (y = 0; y < FONT_SCANLINES; y++) { |
341 | for (y = 0; y < FONT_SCANLINES; y++) { |
| 336 | unsigned int x; |
342 | unsigned int x; |
| 337 | 343 | ||
| 338 | for (x = 0; x < FONT_WIDTH; x++) |
344 | for (x = 0; x < FONT_WIDTH; x++) { |
| 339 | rgb_conv(&glyphs[GLYPH_POS(glyph, y) + x * pixelbytes], |
345 | void *dst = &glyphs[GLYPH_POS(glyph, y) + |
| - | 346 | x * pixelbytes]; |
|
| - | 347 | uint32_t rgb = (fb_font[ROW2Y(glyph) + y] & |
|
| 340 | (fb_font[ROW2Y(glyph) + y] & (1 << (7 - x))) ? FG_COLOR : BG_COLOR); |
348 | (1 << (7 - x))) ? FG_COLOR : BG_COLOR; |
| - | 349 | rgb_conv(dst, rgb); |
|
| - | 350 | } |
|
| 341 | } |
351 | } |
| 342 | } |
352 | } |
| 343 | 353 | ||
| 344 | /* Prerender background scanline */ |
354 | /* Prerender background scanline */ |
| 345 | unsigned int x; |
355 | unsigned int x; |
| Line 360... | Line 370... | ||
| 360 | for (y = 0; y < LOGO_HEIGHT; y++) { |
370 | for (y = 0; y < LOGO_HEIGHT; y++) { |
| 361 | unsigned int x; |
371 | unsigned int x; |
| 362 | 372 | ||
| 363 | for (x = 0; x < xres; x++) |
373 | for (x = 0; x < xres; x++) |
| 364 | rgb_conv(&fb_addr[FB_POS(x, y)], |
374 | rgb_conv(&fb_addr[FB_POS(x, y)], |
| - | 375 | (x < LOGO_WIDTH) ? |
|
| 365 | (x < LOGO_WIDTH) ? fb_logo[y * LOGO_WIDTH + x] : LOGO_COLOR); |
376 | fb_logo[y * LOGO_WIDTH + x] : |
| - | 377 | LOGO_COLOR); |
|
| 366 | } |
378 | } |
| 367 | } |
379 | } |
| 368 | 380 | ||
| 369 | unsigned int row; |
381 | unsigned int row; |
| 370 | 382 | ||
| Line 374... | Line 386... | ||
| 374 | 386 | ||
| 375 | for (yd = 0; yd < FONT_SCANLINES; yd++) { |
387 | for (yd = 0; yd < FONT_SCANLINES; yd++) { |
| 376 | unsigned int x; |
388 | unsigned int x; |
| 377 | unsigned int col; |
389 | unsigned int col; |
| 378 | 390 | ||
| 379 | for (col = 0, x = 0; col < cols; col++, x += FONT_WIDTH) |
391 | for (col = 0, x = 0; col < cols; |
| - | 392 | col++, x += FONT_WIDTH) { |
|
| 380 | memcpy(&fb_addr[FB_POS(x, y + yd)], |
393 | void *d = &fb_addr[FB_POS(x, y + yd)]; |
| 381 | &glyphs[GLYPH_POS(backbuf[BB_POS(col, row)], yd)], |
394 | void *s = &glyphs[GLYPH_POS(backbuf[BB_POS(col, |
| - | 395 | row)], yd)]; |
|
| 382 | glyphscanline); |
396 | memcpy(d, s, glyphscanline); |
| - | 397 | } |
|
| 383 | } |
398 | } |
| 384 | } |
399 | } |
| 385 | 400 | ||
| 386 | if (COL2X(cols) < xres) { |
401 | if (COL2X(cols) < xres) { |
| 387 | unsigned int y; |
402 | unsigned int y; |
| Line 389... | Line 404... | ||
| 389 | 404 | ||
| 390 | for (y = ylogo; y < yres; y++) |
405 | for (y = ylogo; y < yres; y++) |
| 391 | memcpy(&fb_addr[FB_POS(COL2X(cols), y)], bgscan, size); |
406 | memcpy(&fb_addr[FB_POS(COL2X(cols), y)], bgscan, size); |
| 392 | } |
407 | } |
| 393 | 408 | ||
| 394 | if (ROW2Y(rowtrim) < yres) { |
409 | if (ROW2Y(rowtrim) + ylogo < yres) { |
| 395 | unsigned int y; |
410 | unsigned int y; |
| 396 | 411 | ||
| 397 | for (y = ROW2Y(rowtrim); y < yres; y++) |
412 | for (y = ROW2Y(rowtrim) + ylogo; y < yres; y++) |
| 398 | memcpy(&fb_addr[FB_POS(0, y)], bgscan, bgscanbytes); |
413 | memcpy(&fb_addr[FB_POS(0, y)], bgscan, bgscanbytes); |
| 399 | } |
414 | } |
| 400 | } |
415 | } |
| 401 | 416 | ||
| 402 | 417 | ||