summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2009-04-09 04:22:14 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2009-04-09 04:22:14 +0000
commit93fccc763b97323cb3112bf9afee819cd03ba195 (patch)
tree8b3da3ecd807da715478fe4cc1697fcffea1bd67 /apps/plugins
parent49fcfe81b861f866c4e9e16e272f33654a1be450 (diff)
downloadrockbox-93fccc763b97323cb3112bf9afee819cd03ba195.tar.gz
rockbox-93fccc763b97323cb3112bf9afee819cd03ba195.zip
M:Robe 500: More LCD initialization, QVGA (vs. VGA) is now enabled by default for performance, 256 color palette mode added, include some linker cleanups and reorganization. Doom and MPEGPlayer now run reaonably well.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20664 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/doom/i_video.c95
-rw-r--r--apps/plugins/plugin.lds20
2 files changed, 70 insertions, 45 deletions
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index c148d17077..418fcd4404 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -140,6 +140,12 @@ static fb_data *paldata=NULL;
140// 140//
141void I_ShutdownGraphics(void) 141void I_ShutdownGraphics(void)
142{ 142{
143#if defined(HAVE_LCD_MODES)
144#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
145 rb->lcd_set_mode(LCD_MODE_RGB565);
146#endif
147#endif
148
143#ifndef HAVE_LCD_COLOR 149#ifndef HAVE_LCD_COLOR
144 grey_release(); 150 grey_release();
145#endif 151#endif
@@ -597,13 +603,19 @@ static void I_UploadNewPalette(int pal)
597 } 603 }
598 604
599#ifdef RANGECHECK 605#ifdef RANGECHECK
600 if ((size_t)pal >= num_pals) 606 if ((size_t)pal >= num_pals)
601 I_Error("I_UploadNewPalette: Palette number out of range (%d>=%d)", 607 I_Error("I_UploadNewPalette: Palette number out of range (%d>=%d)",
602 pal, num_pals); 608 pal, num_pals);
603#endif 609#endif
604 memcpy(palette,paldata+256*pal,256*sizeof(fb_data));
605}
606 610
611 memcpy(palette,paldata+256*pal,256*sizeof(fb_data));
612
613#if defined(HAVE_LCD_MODES)
614#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
615 rb->lcd_pal256_update_pal(paldata+256*pal);
616#endif
617#endif
618}
607 619
608// 620//
609// I_FinishUpdate 621// I_FinishUpdate
@@ -613,36 +625,37 @@ void I_FinishUpdate (void)
613{ 625{
614 int count; 626 int count;
615 byte *src = d_screens[0]; 627 byte *src = d_screens[0];
628
616#if (CONFIG_LCD == LCD_H300) && !defined(SIMULATOR) 629#if (CONFIG_LCD == LCD_H300) && !defined(SIMULATOR)
617 count = SCREENWIDTH*SCREENHEIGHT; 630 count = SCREENWIDTH*SCREENHEIGHT;
618 631
619 /* ASM screen update (drops ~300 tics) */ 632 /* ASM screen update (drops ~300 tics) */
620 asm volatile ( 633 asm volatile (
621 "move.w #33, (%[LCD]) \n" /* Setup the LCD controller */ 634 "move.w #33, (%[LCD]) \n" /* Setup the LCD controller */
622 "nop \n" 635 "nop \n"
623 "clr.w (%[LCD2]) \n" 636 "clr.w (%[LCD2]) \n"
624 "nop \n" 637 "nop \n"
625 "move.w #34, (%[LCD]) \n" /* End LCD controller setup */ 638 "move.w #34, (%[LCD]) \n" /* End LCD controller setup */
626 "clr.l %%d1 \n" 639 "clr.l %%d1 \n"
627 ".loop: \n" 640 ".loop: \n"
628 "move.l (%[scrp])+, %%d0 \n" 641 "move.l (%[scrp])+, %%d0 \n"
629 "swap.w %%d0 \n" 642 "swap.w %%d0 \n"
630 "move.w %%d0, %%d1 \n" 643 "move.w %%d0, %%d1 \n"
631 "lsr.l #8,%%d1 \n" 644 "lsr.l #8,%%d1 \n"
632 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n" 645 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
633 "move.b %%d0,%%d1 \n" 646 "move.b %%d0,%%d1 \n"
634 "swap.w %%d0 \n" 647 "swap.w %%d0 \n"
635 "nop \n" 648 "nop \n"
636 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n" 649 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
637 "move.w %%d0, %%d1 \n" 650 "move.w %%d0, %%d1 \n"
638 "lsr.l #8,%%d1 \n" 651 "lsr.l #8,%%d1 \n"
639 "nop \n" 652 "nop \n"
640 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n" 653 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
641 "move.b %%d0,%%d1 \n" 654 "move.b %%d0,%%d1 \n"
642 "nop \n" 655 "nop \n"
643 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n" 656 "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
644 "subq.l #4,%[cnt] \n" 657 "subq.l #4,%[cnt] \n"
645 "bne.b .loop \n" 658 "bne.b .loop \n"
646 : /* outputs */ 659 : /* outputs */
647 [scrp]"+a"(src), 660 [scrp]"+a"(src),
648 [cnt] "+d"(count) 661 [cnt] "+d"(count)
@@ -713,7 +726,14 @@ void I_FinishUpdate (void)
713 "d0", "d1", "d2", "d3" 726 "d0", "d1", "d2", "d3"
714 ); 727 );
715#else 728#else
716#ifdef HAVE_LCD_COLOR 729
730/* If the hardware has support for a paletted mode it takes precidence */
731#if defined(HAVE_LCD_MODES)
732#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
733 (void) count;
734 rb->lcd_blit_pal256(src, 0, 0, 0, 0, LCD_WIDTH, LCD_HEIGHT);
735#endif
736#elif defined(HAVE_LCD_COLOR)
717#if(LCD_HEIGHT>LCD_WIDTH) 737#if(LCD_HEIGHT>LCD_WIDTH)
718 if(rotate_screen) 738 if(rotate_screen)
719 { 739 {
@@ -742,8 +762,9 @@ void I_FinishUpdate (void)
742 *dst++ = palette[*src++]; 762 *dst++ = palette[*src++];
743 while (--count); 763 while (--count);
744 } 764 }
745 rb->lcd_update(); 765 rb->lcd_update();
746#else /* !HAVE_LCD_COLOR */ 766#else /* !HAVE_LCD_COLOR */
767
747 unsigned char *dst; 768 unsigned char *dst;
748 int y; 769 int y;
749 770
@@ -758,8 +779,8 @@ void I_FinishUpdate (void)
758 779
759 grey_ub_gray_bitmap(greybuffer, 0, y, SCREENWIDTH, 1); 780 grey_ub_gray_bitmap(greybuffer, 0, y, SCREENWIDTH, 1);
760 } 781 }
761#endif /* !HAVE_LCD_COLOR */ 782#endif
762#endif 783#endif
763} 784}
764 785
765// 786//
@@ -786,6 +807,12 @@ void I_InitGraphics(void)
786 printf("Starting Graphics engine\n"); 807 printf("Starting Graphics engine\n");
787 808
788 noprintf=1; 809 noprintf=1;
810
811#if defined(HAVE_LCD_MODES)
812#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
813 rb->lcd_set_mode(LCD_MODE_PAL256);
814#endif
815#endif
789 816
790 /* Note: The other screens are allocated as needed */ 817 /* Note: The other screens are allocated as needed */
791 818
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 9c65f31779..d6f62341ce 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -35,18 +35,20 @@ OUTPUT_FORMAT(elf32-littlemips)
35#define NOCACHE_BASE 0x00000000 35#define NOCACHE_BASE 0x00000000
36#endif 36#endif
37 37
38#if CONFIG_CPU==DM320 || CONFIG_CPU==S3C2440 38#if CONFIG_CPU==DM320 || CONFIG_CPU==IMX31L
39#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2) 39/* Give this 1 meg to allow it to align to the MMU boundary */
40#define LCD_TTB_AREA 0x100000
41#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA
40 42
43#elif CONFIG_CPU==S3C2440
44#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2)
41/* must be 16Kb (0x4000) aligned */ 45/* must be 16Kb (0x4000) aligned */
42#define TTB_SIZE (0x4000) 46#define TTB_SIZE (0x4000)
43#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE 47#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE
44#elif CONFIG_CPU==IMX31L 48
45#include "imx31l.h"
46/* Reserve 1mb for LCD buffer/TTB as in app.lds */
47#define DRAMSIZE (MEMORYSIZE * 0x100000 - 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
48#elif CONFIG_CPU==AS3525 && MEMORYSIZE <= 2 49#elif CONFIG_CPU==AS3525 && MEMORYSIZE <= 2
49#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET 50#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET
51
50#else 52#else
51#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE 53#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
52#endif 54#endif
@@ -77,11 +79,7 @@ OUTPUT_FORMAT(elf32-littlemips)
77#define DRAMORIG 0xc00000 + STUBOFFSET 79#define DRAMORIG 0xc00000 + STUBOFFSET
78#define IRAMORIG 0x407000 80#define IRAMORIG 0x407000
79#define IRAMSIZE 0x9000 81#define IRAMSIZE 0x9000
80#elif CONFIG_CPU == S3C2440 82#elif CONFIG_CPU == IMX31L || CONFIG_CPU == S3C2440
81#define DRAMORIG 0x0 + STUBOFFSET
82#define IRAM DRAM
83#define IRAMSIZE 0
84#elif CONFIG_CPU == IMX31L
85#define DRAMORIG 0x0 + STUBOFFSET 83#define DRAMORIG 0x0 + STUBOFFSET
86#define IRAM DRAM 84#define IRAM DRAM
87#define IRAMSIZE 0 85#define IRAMSIZE 0