Listing 2 The Algorithm in Listing 1 rewritten for a Yamaga YGV610B

/*

* This function displays a 4-bit bitmap described by the

* BitmapData structure. It will display the bitmap by

* writing the data directly to RAM that can then be

* read by the YGV601B controller.

*

* VRAM_BASE is defined as the address in video-RAM of

* the top left pixel of the display.

*

* DISPLAY_BYTE_WIDTH is the number of bytes wide the display is.

* For a 4-bits per pixel screen, the DISPLAY_BYTE_WIDTH is

* half of the width of the display.

*

* It has two restrictions.

* 1. The bitmap must be an even number of pixels wide.

* 2. The left value passed in must be an even number.

*

* Removing the second restriction would make the routine

* more general, but a lot slower.

*

* left, top is the location of the upper left dot

* of the bitmap on the display.

*/

void imageRenderForYGV(const BitmapData * imagePtr, int left, int top)

{

/*

* x and y will track the location we are

* drawing within the bitmap.

*/

unsigned int x,y;

/*

* index tracks our location within the array of bytes

* that represent the image.

*/

long index;

unsigned char *imageOffset;

/*

* The imageOffset is the location in video-RAM where

* we want to display the top left dot of the bitmap.

*/

imageOffset = VRAM_BASE + top*DISPLAY_BYTE_WIDTH + left/2;

/*

* Bitmaps must start on an even boundary to allow a byte for byte

* mapping.

*/

assert(left%2 == 0);

/*

* Make sure that the bitmap does not go outside of the display.

*/

assert(top + imagePtr->height <= DISPLAY_FULL_HEIGHT);

assert(left + imagePtr->width <= DISPLAY_FULL_WIDTH);

index = 0;

for (y = 0; y < imagePtr->height; y++)

{

/*

* x will step forward 2 at a time, since each

* byte contains 2 pixels

*/

for (x = 0; x < imagePtr->width; x += 2)

{

/*

* The left hand side of this assignment is the location

* in video memory where the next one byte (two dots) are

* to be displayed.

*/

*(imageOffset + (y*DISPLAY_BYTE_WIDTH) + x/2) = imagePtr->raw[index];

index++;

}

}

}

Back