summaryrefslogtreecommitdiff
path: root/apps/plugins/doom
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/doom
parent49fcfe81b861f866c4e9e16e272f33654a1be450 (diff)
downloadrockbox-93fccc763b97323cb3112bf9afee819cd03ba195.zip
rockbox-93fccc763b97323cb3112bf9afee819cd03ba195.tar.gz
rockbox-93fccc763b97323cb3112bf9afee819cd03ba195.tar.bz2
rockbox-93fccc763b97323cb3112bf9afee819cd03ba195.tar.xz
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/doom')
-rw-r--r--apps/plugins/doom/i_video.c95
1 files changed, 61 insertions, 34 deletions
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index c148d17..418fcd4 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -140,6 +140,12 @@ static fb_data *paldata=NULL;
//
void I_ShutdownGraphics(void)
{
+#if defined(HAVE_LCD_MODES)
+#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
+ rb->lcd_set_mode(LCD_MODE_RGB565);
+#endif
+#endif
+
#ifndef HAVE_LCD_COLOR
grey_release();
#endif
@@ -597,13 +603,19 @@ static void I_UploadNewPalette(int pal)
}
#ifdef RANGECHECK
- if ((size_t)pal >= num_pals)
- I_Error("I_UploadNewPalette: Palette number out of range (%d>=%d)",
- pal, num_pals);
+ if ((size_t)pal >= num_pals)
+ I_Error("I_UploadNewPalette: Palette number out of range (%d>=%d)",
+ pal, num_pals);
#endif
- memcpy(palette,paldata+256*pal,256*sizeof(fb_data));
-}
+ memcpy(palette,paldata+256*pal,256*sizeof(fb_data));
+
+#if defined(HAVE_LCD_MODES)
+#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
+ rb->lcd_pal256_update_pal(paldata+256*pal);
+#endif
+#endif
+}
//
// I_FinishUpdate
@@ -613,36 +625,37 @@ void I_FinishUpdate (void)
{
int count;
byte *src = d_screens[0];
+
#if (CONFIG_LCD == LCD_H300) && !defined(SIMULATOR)
count = SCREENWIDTH*SCREENHEIGHT;
/* ASM screen update (drops ~300 tics) */
asm volatile (
- "move.w #33, (%[LCD]) \n" /* Setup the LCD controller */
- "nop \n"
- "clr.w (%[LCD2]) \n"
- "nop \n"
- "move.w #34, (%[LCD]) \n" /* End LCD controller setup */
- "clr.l %%d1 \n"
- ".loop: \n"
- "move.l (%[scrp])+, %%d0 \n"
- "swap.w %%d0 \n"
- "move.w %%d0, %%d1 \n"
- "lsr.l #8,%%d1 \n"
- "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
- "move.b %%d0,%%d1 \n"
- "swap.w %%d0 \n"
- "nop \n"
- "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
- "move.w %%d0, %%d1 \n"
- "lsr.l #8,%%d1 \n"
- "nop \n"
- "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
- "move.b %%d0,%%d1 \n"
- "nop \n"
- "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
- "subq.l #4,%[cnt] \n"
- "bne.b .loop \n"
+ "move.w #33, (%[LCD]) \n" /* Setup the LCD controller */
+ "nop \n"
+ "clr.w (%[LCD2]) \n"
+ "nop \n"
+ "move.w #34, (%[LCD]) \n" /* End LCD controller setup */
+ "clr.l %%d1 \n"
+ ".loop: \n"
+ "move.l (%[scrp])+, %%d0 \n"
+ "swap.w %%d0 \n"
+ "move.w %%d0, %%d1 \n"
+ "lsr.l #8,%%d1 \n"
+ "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
+ "move.b %%d0,%%d1 \n"
+ "swap.w %%d0 \n"
+ "nop \n"
+ "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
+ "move.w %%d0, %%d1 \n"
+ "lsr.l #8,%%d1 \n"
+ "nop \n"
+ "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
+ "move.b %%d0,%%d1 \n"
+ "nop \n"
+ "move.w (%[pal], %%d1.l:2), (%[LCD2]) \n"
+ "subq.l #4,%[cnt] \n"
+ "bne.b .loop \n"
: /* outputs */
[scrp]"+a"(src),
[cnt] "+d"(count)
@@ -713,7 +726,14 @@ void I_FinishUpdate (void)
"d0", "d1", "d2", "d3"
);
#else
-#ifdef HAVE_LCD_COLOR
+
+/* If the hardware has support for a paletted mode it takes precidence */
+#if defined(HAVE_LCD_MODES)
+#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
+ (void) count;
+ rb->lcd_blit_pal256(src, 0, 0, 0, 0, LCD_WIDTH, LCD_HEIGHT);
+#endif
+#elif defined(HAVE_LCD_COLOR)
#if(LCD_HEIGHT>LCD_WIDTH)
if(rotate_screen)
{
@@ -742,8 +762,9 @@ void I_FinishUpdate (void)
*dst++ = palette[*src++];
while (--count);
}
- rb->lcd_update();
+ rb->lcd_update();
#else /* !HAVE_LCD_COLOR */
+
unsigned char *dst;
int y;
@@ -758,8 +779,8 @@ void I_FinishUpdate (void)
grey_ub_gray_bitmap(greybuffer, 0, y, SCREENWIDTH, 1);
}
-#endif /* !HAVE_LCD_COLOR */
-#endif
+#endif
+#endif
}
//
@@ -786,6 +807,12 @@ void I_InitGraphics(void)
printf("Starting Graphics engine\n");
noprintf=1;
+
+#if defined(HAVE_LCD_MODES)
+#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
+ rb->lcd_set_mode(LCD_MODE_PAL256);
+#endif
+#endif
/* Note: The other screens are allocated as needed */