sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // bootldr\src\display\display.cpp sl@0: // sl@0: // sl@0: sl@0: #define FILE_ID 0x44495350 sl@0: #define DEFINE_COLOURS sl@0: sl@0: // sl@0: // Defining ENABLE_TRANSFER_STATS will display simplistic average and point sl@0: // transfer rates in bytes per second and provide an estimate of the length of sl@0: // time remaining. sl@0: // sl@0: #define ENABLE_TRANSFER_STATS sl@0: sl@0: #include "bootldr.h" sl@0: #include sl@0: #include sl@0: sl@0: TUint8* Screen; sl@0: TInt Screenwidth, Screenheight; // screen dimentions in pixels sl@0: TInt XPos; sl@0: TInt YPos; sl@0: TUint Colours; sl@0: TUint PixelSize = 1; // size of a pixel in bytes sl@0: sl@0: TUint Progress[2]; sl@0: TUint Pixels[2]; sl@0: TUint Limit[2]; sl@0: TUint32 ProgressTime[2]; sl@0: TUint32 StartTime; sl@0: sl@0: // Palette entries are in the platform's config.h sl@0: const TUint16 Palette[16]= { sl@0: KPaletteEntBlack | KPaletteEntPBS, sl@0: KPaletteEntMidBlue, // 1 sl@0: KPaletteEntMidGreen, // 2 sl@0: KPaletteEntMidCyan, // 3 sl@0: KPaletteEntMidRed, // 4 sl@0: KPaletteEntMidMagenta, // 5 sl@0: KPaletteEntMidYellow, // 6 sl@0: KPaletteEntDimWhite, // 7 sl@0: KPaletteEntGray, // 8 sl@0: KPaletteEntBlue, // 9 sl@0: KPaletteEntGreen, // 10 A sl@0: KPaletteEntCyan, // 11 B sl@0: KPaletteEntRed, // 12 C sl@0: KPaletteEntMagenta, // 13 D sl@0: KPaletteEntYellow, // 14 E sl@0: KPaletteEntWhite // 15 F sl@0: }; sl@0: sl@0: const TUint KRgbBlack = 0x000000; sl@0: //const TUint KRgbDarkGray = 0x555555; sl@0: const TUint KRgbDarkRed = 0x800000; sl@0: const TUint KRgbDarkGreen = 0x008000; sl@0: const TUint KRgbDarkYellow = 0x808000; sl@0: const TUint KRgbDarkBlue = 0x000080; sl@0: const TUint KRgbDarkMagenta = 0x800080; sl@0: const TUint KRgbDarkCyan = 0x008080; sl@0: const TUint KRgbRed = 0xFF0000; sl@0: //const TUint KRgbGreen = 0x00FF00; sl@0: const TUint KRgbYellow = 0xFFFF00; sl@0: const TUint KRgbBlue = 0x0000FF; sl@0: const TUint KRgbMagenta = 0xFF00FF; sl@0: const TUint KRgbCyan = 0x00FFFF; sl@0: const TUint KRgbGray = 0xAAAAAA; sl@0: const TUint KRgbWhite = 0xFFFFFF; sl@0: sl@0: const TUint KRgbDimWhite = 0xCCCCCC; sl@0: sl@0: const TUint32 Palette32[16] = sl@0: { sl@0: KRgbBlack, // 0 sl@0: KRgbDarkBlue, // 1 sl@0: KRgbDarkGreen, // 2 sl@0: KRgbDarkCyan, // 3 sl@0: KRgbDarkRed, // 4 sl@0: KRgbDarkMagenta, // 5 sl@0: KRgbDarkYellow, // 6 sl@0: KRgbDimWhite, // 7 KRgbDarkGray() sl@0: KRgbGray, // 8 sl@0: KRgbBlue, // 9 sl@0: KRgbDarkGreen, // 10 sl@0: KRgbCyan, // 11 sl@0: KRgbRed, // 12 sl@0: KRgbMagenta, // 13 sl@0: KRgbYellow, // 14 sl@0: KRgbWhite // 15 sl@0: }; sl@0: sl@0: // KForeground, Kbackground and [I]Pcolour entries are indexes into the palette. sl@0: // The progress bar colours are of the form "(foreground << 8) | background" sl@0: const TUint8 KForeground = 15; sl@0: const TUint8 KBackground = 9; sl@0: const TUint PColour[2]={ 0xa08, 0xc08 }; // (10|8) and (12|8) sl@0: const TUint IPColour[2]={ 0x809, 0x809 }; // (8|9) and (8|9) sl@0: sl@0: #define NUM_FONTS 96 sl@0: #define FONT_HEIGHT 10 sl@0: #define FONT_WIDTH 8 sl@0: sl@0: #define SCREEN_SIZE (Screenheight*Screenwidth*PixelSize) // number of pixels (size in bytes) sl@0: sl@0: #define MAX_COLUMN (Screenwidth/FONT_WIDTH) // chars per line e.g. 80 or 40 sl@0: #define MAX_ROW (Screenheight/FONT_HEIGHT) // lines per screen e.g. 48 or 24 sl@0: #define PROGRESSBAR0_ROW (MAX_ROW-1) // row in which to draw progress bar 0 sl@0: #define PROGRESSBAR1_ROW (MAX_ROW-2) // row in which to draw progress bar 1 sl@0: #define STATS_ROW (MAX_ROW-3) // DEBUGGING row in which to write eta/bps sl@0: // sl@0: // ascii character code - 32 == character index into bootldr table sl@0: // sl@0: extern const TUint8 Font[NUM_FONTS][FONT_HEIGHT] = sl@0: { sl@0: {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x30,0x78,0x78,0x78,0x30,0x00,0x30,0x00,0x00,0x00}, //! sl@0: {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00}, //# sl@0: {0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00,0x00,0x00}, //$ sl@0: {0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00,0x00,0x00}, sl@0: {0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00,0x00,0x00}, sl@0: {0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,0x00,0x00}, sl@0: {0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,0x00,0x00}, sl@0: {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00}, sl@0: {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00,0x00}, sl@0: {0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00}, //- sl@0: {0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00}, //. sl@0: {0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00}, /// sl@0: sl@0: {0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00,0x00,0x00}, //0 sl@0: {0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00,0x00,0x00}, sl@0: {0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00,0x00,0x00}, sl@0: {0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00,0x00,0x00}, sl@0: {0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00,0x00,0x00}, sl@0: {0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,0x00,0x00}, sl@0: {0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00,0x00,0x00}, sl@0: {0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00,0x00,0x00}, sl@0: {0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00,0x00,0x00}, sl@0: {0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00,0x00,0x00}, //9 sl@0: {0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00}, //: sl@0: {0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,0x00,0x00}, //; sl@0: {0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00,0x00,0x00}, //< sl@0: {0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00}, //= sl@0: {0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,0x00,0x00}, //> sl@0: {0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00,0x00,0x00}, //? sl@0: sl@0: {0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00,0x00,0x00}, //@ sl@0: {0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00,0x00,0x00}, //A sl@0: {0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,0x00,0x00}, //B sl@0: {0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,0x00,0x00}, //C sl@0: {0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,0x00,0x00}, //D sl@0: {0x7E,0x60,0x60,0x78,0x60,0x60,0x7E,0x00,0x00,0x00}, //E sl@0: {0x7E,0x60,0x60,0x78,0x60,0x60,0x60,0x00,0x00,0x00}, //F sl@0: {0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00,0x00,0x00}, //G sl@0: {0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,0x00,0x00}, //H sl@0: {0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00}, //I sl@0: {0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,0x00,0x00}, //J sl@0: {0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,0x00,0x00}, //K sl@0: {0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00}, //L sl@0: {0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00,0x00,0x00}, //M sl@0: {0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,0x00,0x00}, //N sl@0: {0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00}, //O sl@0: sl@0: {0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,0x00,0x00}, //P sl@0: {0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00,0x00,0x00}, //Q sl@0: {0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00,0x00,0x00}, //R sl@0: {0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00,0x00,0x00}, //S sl@0: {0xFC,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00}, //T sl@0: {0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00,0x00,0x00}, //U sl@0: {0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,0x00,0x00}, //V sl@0: {0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,0x00,0x00}, //W sl@0: {0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,0x00,0x00}, //X sl@0: {0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00,0x00,0x00}, //Y sl@0: {0xFE,0x06,0x0C,0x18,0x30,0x60,0xFE,0x00,0x00,0x00}, //Z sl@0: {0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,0x00,0x00}, sl@0: {0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00,0x00,0x00}, sl@0: {0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,0x00,0x00}, sl@0: {0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00}, sl@0: sl@0: {0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00,0x00,0x00}, sl@0: {0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00,0x00,0x00}, sl@0: {0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00,0x00,0x00}, sl@0: {0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8,0x00,0x00}, sl@0: {0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00,0x00,0x00}, sl@0: {0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,0x00,0x00}, sl@0: {0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,0x00}, sl@0: {0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00,0x00,0x00}, sl@0: {0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00}, sl@0: sl@0: {0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0,0x00,0x00}, sl@0: {0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E,0x00,0x00}, sl@0: {0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00,0x00,0x00}, sl@0: {0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00,0x00,0x00}, sl@0: {0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8,0x00,0x00}, sl@0: {0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00,0x00,0x00}, sl@0: {0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00,0x00,0x00}, sl@0: {0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,0x00,0x00}, sl@0: {0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00,0x00,0x00}, sl@0: {0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, sl@0: {0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00}, sl@0: }; sl@0: sl@0: inline void ColourPixel(TInt aXPos, TInt aYPos, TUint aColour) sl@0: /** sl@0: colour a pixel on the screen sl@0: @param aXPos pixel's X coordinate sl@0: @param aYPos pixel's Y coordinate sl@0: @param aColour chosen colour specified as a palette index sl@0: */ sl@0: { sl@0: TUint8* pV = (TUint8*)Screen + (aYPos * (Screenwidth * PixelSize)) + (aXPos * PixelSize); sl@0: sl@0: switch(PixelSize) sl@0: { sl@0: case 4: sl@0: *(TUint32*)pV = Palette32[aColour]; sl@0: break; sl@0: case 2: sl@0: *pV++ = Palette[aColour] & 0xFF ; sl@0: *pV = Palette[aColour] >> 8 ; sl@0: break; sl@0: case 1: sl@0: *pV = aColour; sl@0: break; sl@0: default: sl@0: // Kern::Fault("BOOTLDR colourpixel: Unsupported bpp", PixelSize); sl@0: BOOT_FAULT(); sl@0: } sl@0: } sl@0: sl@0: #ifndef USE_ASM_DISPLAYCHAR sl@0: void DisplayChar(TInt aChar, TInt aXPos, TInt aYPos, TUint aColours) sl@0: /** sl@0: Write a character to the framebuffer sl@0: @param aChar Character to draw sl@0: @param aXPos Character's column sl@0: @param aYPos Character's row sl@0: @param aColour Palette index specified (foreground << 8| background) sl@0: */ sl@0: { sl@0: // Convert the ascii value into an index for the Font table sl@0: TInt tmpChar = aChar - 32; sl@0: sl@0: // Validate this is a valid font index sl@0: if (tmpChar < 0 || tmpChar >= NUM_FONTS) sl@0: return; sl@0: sl@0: // Validate coordinates lie within range. sl@0: if (aXPos > MAX_COLUMN-1 || aYPos > MAX_ROW-1) sl@0: return; sl@0: sl@0: // for each line of the font sl@0: for (TUint line=0 ; line < FONT_HEIGHT ; line++) sl@0: { sl@0: TUint8 tmpLine = Font[tmpChar][line]; sl@0: TUint8 tmpMask = 0x80; sl@0: // for each pixel of the line sl@0: for (TUint pixel=0 ; pixel < FONT_WIDTH ; pixel++) sl@0: { sl@0: ColourPixel(aXPos * FONT_WIDTH + pixel, sl@0: aYPos * FONT_HEIGHT + line, sl@0: (tmpLine & tmpMask) ? aColours >> 8 : aColours & 0xFF); sl@0: sl@0: // Shift the mask one bit downward to examine the next pixel sl@0: tmpMask = tmpMask >> 1; sl@0: } sl@0: } sl@0: sl@0: return; sl@0: } sl@0: #endif sl@0: sl@0: sl@0: GLDEF_C void ClearScreen() sl@0: /** sl@0: Set all the pixels on the screen to the background sl@0: */ sl@0: { sl@0: for (TInt y = 0 ; y aFmt, ...) sl@0: { sl@0: VA_LIST list; sl@0: VA_START(list,aFmt); sl@0: sl@0: TBuf<0x100> aBuf; sl@0: aBuf.AppendFormatList(aFmt,list); sl@0: PutString(aBuf); sl@0: //RDebug::RawPrint(aBuf); sl@0: } sl@0: sl@0: void PutString(const TDesC& aBuf) sl@0: /** sl@0: For each character in the given string write it to the screen sl@0: @param aString String of characters to write sl@0: */ sl@0: { sl@0: const TText* pS=aBuf.Ptr(); sl@0: const TText* pE=pS+aBuf.Length(); sl@0: if (pS!=pE) sl@0: { sl@0: while (pSold_pixels) sl@0: { sl@0: Pixels[aId]=pixels; sl@0: sl@0: while (old_pixels>8)); sl@0: sl@0: ++old_pixels; sl@0: } sl@0: } sl@0: } sl@0: sl@0: void InitDisplay() sl@0: /** sl@0: Reads the properties of the screen from the HAL and configures the settings so sl@0: this driver can colour in pixels. sl@0: */ sl@0: { sl@0: TInt iDisplayMode; sl@0: TInt iScreenAddress; sl@0: TInt iBitsPerPixel; sl@0: TInt iIsPalettized; sl@0: TInt offset; sl@0: sl@0: HAL::Get(HAL::EDisplayMode, iDisplayMode); sl@0: iBitsPerPixel = iDisplayMode; //getbpp needs the current mode as its param sl@0: HAL::Get(HAL::EDisplayBitsPerPixel, iBitsPerPixel); sl@0: sl@0: iIsPalettized = iDisplayMode; //ispalettized needs the current mode as its param sl@0: HAL::Get(HAL::EDisplayIsPalettized, iIsPalettized); sl@0: sl@0: HAL::Get(HAL::EDisplayMemoryAddress, iScreenAddress); sl@0: sl@0: offset = iDisplayMode; sl@0: HAL::Get(HAL::EDisplayOffsetToFirstPixel, offset); sl@0: iScreenAddress += offset; sl@0: sl@0: // get the dimentions of the screen sl@0: HAL::Get(HAL::EDisplayXPixels, Screenwidth); sl@0: HAL::Get(HAL::EDisplayYPixels, Screenheight); sl@0: sl@0: Screen = (TUint8 *)iScreenAddress; sl@0: sl@0: #if 0 sl@0: RDebug::Printf("EDisplayMode %d", iDisplayMode); sl@0: RDebug::Printf("EDisplayBitsPerPixel %d", iBitsPerPixel); sl@0: RDebug::Printf("EDisplayIsPalettized %d", iIsPalettized); sl@0: RDebug::Printf("EDisplayMemoryAddress 0x%x (after offset)", iScreenAddress); sl@0: RDebug::Printf("EDisplayOffsetToFirstPixel %d",offset); sl@0: RDebug::Printf("EDisplayXPixels %d",Screenwidth); sl@0: RDebug::Printf("EDisplayYPixels %d", Screenheight); sl@0: #endif sl@0: sl@0: // get the bits per pixel to work out the size sl@0: if (iBitsPerPixel == 32) sl@0: { sl@0: PixelSize = 4; sl@0: } sl@0: else if (iBitsPerPixel == 16) sl@0: { sl@0: PixelSize = 2; sl@0: } sl@0: else if (iBitsPerPixel == 8) sl@0: { sl@0: #if 0 sl@0: // derive where the palette is located - assumes when no offset to first sl@0: // pixel the palette is at end of framebuffer. sl@0: TUint8* pV; sl@0: if(vidBuf().iOffsetToFirstPixel) sl@0: pV=(TUint8*)(vidBuf().iVideoAddress); sl@0: else sl@0: pV=(TUint8*)(vidBuf().iVideoAddress)+SCREEN_SIZE; sl@0: sl@0: // Kern::Printf("Screenbuffer 0x%x palette 0x%x (%dx%d)",Screen,pV,Screenwidth,Screenheight); sl@0: PixelSize = 1; sl@0: memcpy(pV,Palette,32); sl@0: #endif sl@0: } sl@0: else sl@0: { sl@0: RDebug::Printf("BOOTLDR display: Unsupported bpp %d",iBitsPerPixel); sl@0: BOOT_FAULT(); sl@0: } sl@0: sl@0: ClearScreen(); sl@0: }