diff options
author | Jens Arnold <amiconn@rockbox.org> | 2008-03-14 10:13:58 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2008-03-14 10:13:58 +0000 |
commit | fc2a757e332b97063bf5d7b618c3b3275bdc2edb (patch) | |
tree | 8ef0ea6494e06798bec86fba7cdcdeb361be5470 /apps | |
parent | 1b53f44892289b7f58cffedaafbffdffa195380f (diff) | |
download | rockbox-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
Diffstat (limited to 'apps')
-rw-r--r-- | apps/misc.c | 36 |
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--) |