summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-03-14 10:13:58 +0000
committerJens Arnold <amiconn@rockbox.org>2008-03-14 10:13:58 +0000
commitfc2a757e332b97063bf5d7b618c3b3275bdc2edb (patch)
tree8ef0ea6494e06798bec86fba7cdcdeb361be5470
parent1b53f44892289b7f58cffedaafbffdffa195380f (diff)
downloadrockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.tar.gz
rockbox-fc2a757e332b97063bf5d7b618c3b3275bdc2edb.zip
Make screendump work on the M3 (sim).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16664 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/misc.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/apps/misc.c b/apps/misc.c
index 1f8aa99e0d..9b8c9a7364 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -424,8 +424,10 @@ void screen_dump(void)
424#elif LCD_DEPTH == 2 424#elif LCD_DEPTH == 2
425#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 425#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
426 static unsigned char line_block[BMP_LINESIZE]; 426 static unsigned char line_block[BMP_LINESIZE];
427#else 427#elif LCD_PIXELFORMAT == VERTICAL_PACKING
428 static unsigned char line_block[4][BMP_LINESIZE]; 428 static unsigned char line_block[4][BMP_LINESIZE];
429#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
430 static unsigned char line_block[8][BMP_LINESIZE];
429#endif 431#endif
430#elif LCD_DEPTH == 16 432#elif LCD_DEPTH == 16
431 static unsigned short line_block[BMP_LINESIZE/2]; 433 static unsigned short line_block[BMP_LINESIZE/2];
@@ -501,7 +503,7 @@ void screen_dump(void)
501 503
502 write(fh, line_block, sizeof(line_block)); 504 write(fh, line_block, sizeof(line_block));
503 } 505 }
504#else /* VERTICAL_PACKING */ 506#elif LCD_PIXELFORMAT == VERTICAL_PACKING
505 for (by = LCD_FBHEIGHT - 1; by >= 0; by--) 507 for (by = LCD_FBHEIGHT - 1; by >= 0; by--)
506 { 508 {
507 unsigned char *src = &lcd_framebuffer[by][0]; 509 unsigned char *src = &lcd_framebuffer[by][0];
@@ -511,13 +513,13 @@ void screen_dump(void)
511 for (bx = LCD_WIDTH/2; bx > 0; bx--) 513 for (bx = LCD_WIDTH/2; bx > 0; bx--)
512 { 514 {
513 unsigned char *dst_blk = dst++; 515 unsigned char *dst_blk = dst++;
514 unsigned src_byte0 = *src++; 516 unsigned src_byte0 = *src++ << 4;
515 unsigned src_byte1 = *src++; 517 unsigned src_byte1 = *src++;
516 int iy; 518 int iy;
517 519
518 for (iy = 4; iy > 0; iy--) 520 for (iy = 4; iy > 0; iy--)
519 { 521 {
520 *dst_blk = ((src_byte0 & 3) << 4) | (src_byte1 & 3); 522 *dst_blk = (src_byte0 & 0x30) | (src_byte1 & 0x03);
521 src_byte0 >>= 2; 523 src_byte0 >>= 2;
522 src_byte1 >>= 2; 524 src_byte1 >>= 2;
523 dst_blk -= BMP_LINESIZE; 525 dst_blk -= BMP_LINESIZE;
@@ -526,6 +528,32 @@ void screen_dump(void)
526 528
527 write(fh, line_block, sizeof(line_block)); 529 write(fh, line_block, sizeof(line_block));
528 } 530 }
531#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
532 for (by = LCD_FBHEIGHT - 1; by >= 0; by--)
533 {
534 const fb_data *src = &lcd_framebuffer[by][0];
535 unsigned char *dst = &line_block[7][0];
536
537 memset(line_block, 0, sizeof(line_block));
538 for (bx = LCD_WIDTH/2; bx > 0; bx--)
539 {
540 unsigned char *dst_blk = dst++;
541 unsigned src_data0 = *src++ << 4;
542 unsigned src_data1 = *src++;
543 int iy;
544
545 for (iy = 8; iy > 0; iy--)
546 {
547 *dst_blk = (src_data0 & 0x10) | (src_data1 & 0x01)
548 | ((src_data0 & 0x1000) | (src_data1 & 0x0100)) >> 7;
549 src_data0 >>= 1;
550 src_data1 >>= 1;
551 dst_blk -= BMP_LINESIZE;
552 }
553 }
554
555 write(fh, line_block, sizeof(line_block));
556 }
529#endif 557#endif
530#elif LCD_DEPTH == 16 558#elif LCD_DEPTH == 16
531 for (by = LCD_HEIGHT - 1; by >= 0; by--) 559 for (by = LCD_HEIGHT - 1; by >= 0; by--)