summaryrefslogtreecommitdiff
path: root/apps/plugins/lib/gray_draw.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-10-01 10:20:55 +0000
committerJens Arnold <amiconn@rockbox.org>2005-10-01 10:20:55 +0000
commit05042affc76ec42481bcddba4a3f94a7b77ec98d (patch)
treefc1f73129fbe09b3e2022828c717ba7eb9507603 /apps/plugins/lib/gray_draw.c
parentf0fe3c94772ddf971810e5082dcfb9b0ac462ae4 (diff)
downloadrockbox-05042affc76ec42481bcddba4a3f94a7b77ec98d.tar.gz
rockbox-05042affc76ec42481bcddba4a3f94a7b77ec98d.zip
Core: A graphics framework can now register a hook function to extend the core screendump routine. * Grayscale library: (1) Changed the screendump routine into a hook, and implemented it for H1x0. (2) The planar pixel setting routines now use one register less. Fixes build problem with developer builds (frame pointers enabled) on coldfire.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7574 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/lib/gray_draw.c')
-rw-r--r--apps/plugins/lib/gray_draw.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/apps/plugins/lib/gray_draw.c b/apps/plugins/lib/gray_draw.c
index 4b2237197c..d03f450b5f 100644
--- a/apps/plugins/lib/gray_draw.c
+++ b/apps/plugins/lib/gray_draw.c
@@ -588,7 +588,7 @@ static void _writearray(unsigned char *address, const unsigned char *src,
588 unsigned long *pat_ptr = &pat_stack[8]; 588 unsigned long *pat_ptr = &pat_stack[8];
589 const unsigned char *_src; 589 const unsigned char *_src;
590 unsigned char *addr, *end; 590 unsigned char *addr, *end;
591 unsigned _mask; 591 unsigned _mask, trash;
592 592
593 _mask = mask; 593 _mask = mask;
594 _src = src; 594 _src = src;
@@ -675,7 +675,7 @@ static void _writearray(unsigned char *address, const unsigned char *src,
675 "mov.l @%[patp]+,r7\n" 675 "mov.l @%[patp]+,r7\n"
676 "mov.l @%[patp]+,r8\n" 676 "mov.l @%[patp]+,r8\n"
677 "mov.l @%[patp]+,r9\n" 677 "mov.l @%[patp]+,r9\n"
678 "mov.l @%[patp]+,r10 \n" 678 "mov.l @%[patp],%[rx] \n"
679 679
680 "not %[mask],%[mask] \n" /* "set" mask -> "keep" mask */ 680 "not %[mask],%[mask] \n" /* "set" mask -> "keep" mask */
681 "extu.b %[mask],%[mask] \n" /* mask out high bits */ 681 "extu.b %[mask],%[mask] \n" /* mask out high bits */
@@ -697,7 +697,7 @@ static void _writearray(unsigned char *address, const unsigned char *src,
697 "rotcl r0 \n" 697 "rotcl r0 \n"
698 "shlr r9 \n" 698 "shlr r9 \n"
699 "rotcl r0 \n" 699 "rotcl r0 \n"
700 "shlr r10 \n" 700 "shlr %[rx] \n"
701 "mov.b @%[addr],%[patp]\n" /* read old value */ 701 "mov.b @%[addr],%[patp]\n" /* read old value */
702 "rotcl r0 \n" 702 "rotcl r0 \n"
703 "and %[mask],%[patp] \n" /* mask out unneeded bits */ 703 "and %[mask],%[patp] \n" /* mask out unneeded bits */
@@ -725,7 +725,7 @@ static void _writearray(unsigned char *address, const unsigned char *src,
725 "rotcl r0 \n" 725 "rotcl r0 \n"
726 "shlr r9 \n" 726 "shlr r9 \n"
727 "rotcl r0 \n" 727 "rotcl r0 \n"
728 "shlr r10 \n" 728 "shlr %[rx] \n"
729 "rotcl r0 \n" 729 "rotcl r0 \n"
730 "mov.b r0,@%[addr] \n" /* store byte to bitplane */ 730 "mov.b r0,@%[addr] \n" /* store byte to bitplane */
731 "add %[psiz],%[addr] \n" /* advance to next bitplane */ 731 "add %[psiz],%[addr] \n" /* advance to next bitplane */
@@ -734,21 +734,22 @@ static void _writearray(unsigned char *address, const unsigned char *src,
734 734
735 ".wa_end: \n" 735 ".wa_end: \n"
736 : /* outputs */ 736 : /* outputs */
737 [patp]"+r"(pat_ptr),
738 [addr]"+r"(addr), 737 [addr]"+r"(addr),
739 [mask]"+r"(_mask) 738 [mask]"+r"(_mask),
739 [rx] "=&r"(trash)
740 : /* inputs */ 740 : /* inputs */
741 [psiz]"r"(_gray_info.plane_size),
741 [end] "r"(end), 742 [end] "r"(end),
742 [psiz]"r"(_gray_info.plane_size) 743 [patp]"[rx]"(pat_ptr)
743 : /* clobbers */ 744 : /* clobbers */
744 "r0", "r1", "r2", "r3", "r6", "r7", "r8", "r9", "r10" 745 "r0", "r1", "r2", "r3", "r6", "r7", "r8", "r9"
745 ); 746 );
746#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) 747#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2)
747 unsigned long pat_stack[8]; 748 unsigned long pat_stack[8];
748 unsigned long *pat_ptr = &pat_stack[8]; 749 unsigned long *pat_ptr = &pat_stack[8];
749 const unsigned char *_src; 750 const unsigned char *_src;
750 unsigned char *addr, *end; 751 unsigned char *addr, *end;
751 unsigned _mask; 752 unsigned _mask, trash;
752 753
753 _mask = mask; 754 _mask = mask;
754 _src = src; 755 _src = src;
@@ -819,8 +820,8 @@ static void _writearray(unsigned char *address, const unsigned char *src,
819 /* set the bits for all 8 pixels in all bytes according to the 820 /* set the bits for all 8 pixels in all bytes according to the
820 * precalculated patterns on the pattern stack */ 821 * precalculated patterns on the pattern stack */
821 asm volatile ( 822 asm volatile (
822 "movem.l (%[patp]),%%d2-%%d6/%%a0-%%a2 \n" /* pop all 8 patterns */ 823 "movem.l (%[patp]),%%d2-%%d6/%%a0-%%a1/%[ax] \n"
823 824 /* pop all 8 patterns */
824 "not.l %[mask] \n" /* "set" mask -> "keep" mask */ 825 "not.l %[mask] \n" /* "set" mask -> "keep" mask */
825 "and.l #0xFF,%[mask] \n" 826 "and.l #0xFF,%[mask] \n"
826 "beq.b .wa_sloop \n" /* yes: jump to short loop */ 827 "beq.b .wa_sloop \n" /* yes: jump to short loop */
@@ -845,10 +846,10 @@ static void _writearray(unsigned char *address, const unsigned char *src,
845 "lsr.l #1,%%d1 \n" 846 "lsr.l #1,%%d1 \n"
846 "addx.l %%d0,%%d0 \n" 847 "addx.l %%d0,%%d0 \n"
847 "move.l %%d1,%%a1 \n" 848 "move.l %%d1,%%a1 \n"
848 "move.l %%a2,%%d1 \n" 849 "move.l %[ax],%%d1 \n"
849 "lsr.l #1,%%d1 \n" 850 "lsr.l #1,%%d1 \n"
850 "addx.l %%d0,%%d0 \n" 851 "addx.l %%d0,%%d0 \n"
851 "move.l %%d1,%%a2 \n" 852 "move.l %%d1,%[ax] \n"
852 853
853 "move.b (%[addr]),%%d1 \n" /* read old value */ 854 "move.b (%[addr]),%%d1 \n" /* read old value */
854 "and.l %[mask],%%d1 \n" /* mask out unneeded bits */ 855 "and.l %[mask],%%d1 \n" /* mask out unneeded bits */
@@ -881,10 +882,10 @@ static void _writearray(unsigned char *address, const unsigned char *src,
881 "lsr.l #1,%%d1 \n" 882 "lsr.l #1,%%d1 \n"
882 "addx.l %%d0,%%d0 \n" 883 "addx.l %%d0,%%d0 \n"
883 "move.l %%d1,%%a1 \n" 884 "move.l %%d1,%%a1 \n"
884 "move.l %%a2,%%d1 \n" 885 "move.l %[ax],%%d1 \n"
885 "lsr.l #1,%%d1 \n" 886 "lsr.l #1,%%d1 \n"
886 "addx.l %%d0,%%d0 \n" 887 "addx.l %%d0,%%d0 \n"
887 "move.l %%d1,%%a2 \n" 888 "move.l %%d1,%[ax] \n"
888 889
889 "move.b %%d0,(%[addr]) \n" /* store byte to bitplane */ 890 "move.b %%d0,(%[addr]) \n" /* store byte to bitplane */
890 "add.l %[psiz],%[addr] \n" /* advance to next bitplane */ 891 "add.l %[psiz],%[addr] \n" /* advance to next bitplane */
@@ -894,13 +895,14 @@ static void _writearray(unsigned char *address, const unsigned char *src,
894 ".wa_end: \n" 895 ".wa_end: \n"
895 : /* outputs */ 896 : /* outputs */
896 [addr]"+a"(addr), 897 [addr]"+a"(addr),
897 [mask]"+d"(_mask) 898 [mask]"+d"(_mask),
899 [ax] "=&a"(trash)
898 : /* inputs */ 900 : /* inputs */
899 [psiz]"a"(_gray_info.plane_size), 901 [psiz]"a"(_gray_info.plane_size),
900 [end] "a"(end), 902 [end] "a"(end),
901 [patp]"a"(pat_ptr) 903 [patp]"[ax]"(pat_ptr)
902 : /* clobbers */ 904 : /* clobbers */
903 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "a0", "a1", "a2" 905 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "a0", "a1"
904 ); 906 );
905#endif 907#endif
906} 908}