summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
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 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 */
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 9c65f31..d6f6234 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -35,18 +35,20 @@ OUTPUT_FORMAT(elf32-littlemips)
#define NOCACHE_BASE 0x00000000
#endif
-#if CONFIG_CPU==DM320 || CONFIG_CPU==S3C2440
-#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2)
+#if CONFIG_CPU==DM320 || CONFIG_CPU==IMX31L
+/* Give this 1 meg to allow it to align to the MMU boundary */
+#define LCD_TTB_AREA 0x100000
+#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA
+#elif CONFIG_CPU==S3C2440
+#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2)
/* must be 16Kb (0x4000) aligned */
#define TTB_SIZE (0x4000)
#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE
-#elif CONFIG_CPU==IMX31L
-#include "imx31l.h"
-/* Reserve 1mb for LCD buffer/TTB as in app.lds */
-#define DRAMSIZE (MEMORYSIZE * 0x100000 - 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
+
#elif CONFIG_CPU==AS3525 && MEMORYSIZE <= 2
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET
+
#else
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
#endif
@@ -77,11 +79,7 @@ OUTPUT_FORMAT(elf32-littlemips)
#define DRAMORIG 0xc00000 + STUBOFFSET
#define IRAMORIG 0x407000
#define IRAMSIZE 0x9000
-#elif CONFIG_CPU == S3C2440
-#define DRAMORIG 0x0 + STUBOFFSET
-#define IRAM DRAM
-#define IRAMSIZE 0
-#elif CONFIG_CPU == IMX31L
+#elif CONFIG_CPU == IMX31L || CONFIG_CPU == S3C2440
#define DRAMORIG 0x0 + STUBOFFSET
#define IRAM DRAM
#define IRAMSIZE 0