saved another 270 bytes

This commit is contained in:
Christian Kroll 2011-01-25 22:59:55 +00:00
parent ccc549db61
commit 4920272878
5 changed files with 52 additions and 47 deletions

View File

@ -6,9 +6,9 @@
#include "27c3.h"
static uint8_t logo_27c3_getChunk(unsigned int const nBitPlane,
unsigned int const nChunkX,
unsigned int const nChunkY,
static uint8_t logo_27c3_getChunk(unsigned char const nBitPlane,
unsigned char const nChunkX,
unsigned char const nChunkY,
unsigned int const nFrame)
{
assert(nBitPlane < 2);

View File

@ -6,9 +6,9 @@
#include "amphibian.h"
static uint8_t amphibian_getChunk(unsigned int const nBitPlane,
unsigned int const nChunkX,
unsigned int const nChunkY,
static uint8_t amphibian_getChunk(unsigned char const nBitPlane,
unsigned char const nChunkX,
unsigned char const nChunkY,
unsigned int const nFrame)
{
assert(nChunkX < 6);
@ -129,7 +129,7 @@ static uint8_t amphibian_getChunk(unsigned int const nBitPlane,
{0x07, 0xF0, 0xFE}}};
if ((nChunkX >= 0) && (nChunkX <= 2) && (nChunkY >= 2) && (nChunkY <= 5)
if ((nChunkX <= 2) && (nChunkY >= 2) && (nChunkY <= 5)
&& (((nFrame >> 1) % 8) != 0))
{
uint8_t nOffset;
@ -148,6 +148,7 @@ static uint8_t amphibian_getChunk(unsigned int const nBitPlane,
nOffset = 8;
break;
case 4:
default:
nOffset = 12;
break;
}

View File

@ -6,6 +6,7 @@
#include "../util.h"
#include "../autoconf.h"
#include "../pixel.h"
#include "../joystick/joystick.h"
#include "bitmapscroller.h"
@ -15,17 +16,17 @@
*/
typedef struct bitmap_t
{
unsigned int nWidth; /**< Width of the bitmap. */
unsigned int nHeight; /**< Height of the bitmap. */
unsigned char nWidth; /**< Width of the bitmap. */
unsigned char nHeight; /**< Height of the bitmap. */
unsigned char nBitPlanes; /**< Number of bit planes. */
bitmap_getChunk_t fpGetChunk; /**< Bitmap chunk retrieving function. */
unsigned int nFrame; /**< Current frame number. */
unsigned int nViewportWidth; /**< Width of the displayed content. */
unsigned int nViewportHeight; /**< Height of the displayed content. */
unsigned int nXDomain; /**< Last valid x-coordinate for viewport. */
unsigned int nYDomain; /**< Last valid y-coordinate for viewport. */
unsigned int nChunkDomain; /**< Last valid chunk for viewport. */
unsigned int nChunkCount; /**< Amount of horiz. chunks of the bitmap. */
unsigned char nViewportWidth; /**< Width of the displayed content. */
unsigned char nViewportHeight; /**< Height of the displayed content. */
unsigned char nXDomain; /**< Last valid x-coordinate for viewport. */
unsigned char nYDomain; /**< Last valid y-coordinate for viewport. */
unsigned char nChunkDomain; /**< Last valid chunk for viewport. */
unsigned char nChunkCount; /**< Amount of horiz. chunks of the bitmap. */
}
bitmap_t;
@ -57,7 +58,7 @@ static unsigned char bitmap_getAlignedChunk(bitmap_t const *const pBitmap,
unsigned char nAlignment = x % 8;
// we have to go through every bit plane
for (int i = 0; i < pBitmap->nBitPlanes; ++i)
for (unsigned char i = 0; i < pBitmap->nBitPlanes; ++i)
{
// generate chunk
unsigned char nPlaneChunk;
@ -104,24 +105,28 @@ static void bitmap_drawViewport(bitmap_t const *const pBitmap,
unsigned char nPlanes = nBitmapHwPlanes > NUMPLANE ?
NUMPLANE : nBitmapHwPlanes;
for (int8_t y = 0; y < pBitmap->nViewportHeight; ++y)
for (unsigned char y = 0; y < pBitmap->nViewportHeight; ++y)
{
for (int8_t x = pBitmap->nViewportWidth; x > 0; x -= 8)
for (unsigned char x = 0; x < pBitmap->nViewportWidth; x += 8)
{
for (int8_t p = NUMPLANE - nPlanes; p < NUMPLANE; ++p)
for (unsigned char p = NUMPLANE - nPlanes; p < NUMPLANE; ++p)
{
uint8_t nChunk;
if ((nX + x - 8) >= 0)
unsigned char nChunk;
#if ((NUM_COLS % 8) != 0)
if ((x + nX) > (8 - NUM_COLS % 8))
{
nChunk = bitmap_getAlignedChunk(pBitmap, p, nX+x-8, nY + y);
pixmap[p][y][pBitmap->nChunkCount - 1 - ((x-1)/8)] = nChunk;
nChunk = bitmap_getAlignedChunk(pBitmap, p,
nX + x - (8 - NUM_COLS % 8), nY + y);
}
else
{
nChunk = bitmap_getAlignedChunk(pBitmap, p, nX, nY + y)
>> (8-x);
pixmap[p][y][pBitmap->nChunkCount - 1] = nChunk;
nChunk = bitmap_getAlignedChunk(pBitmap, p,
nX, nY + y) >> (8 - NUM_COLS % 8);
}
#else
nChunk = bitmap_getAlignedChunk(pBitmap, p, nX + x, nY + y);
#endif
pixmap[p][y][pBitmap->nChunkCount - 1 - (x / 8)] = nChunk;
}
}
}
@ -138,8 +143,8 @@ static void bitmap_drawViewport(bitmap_t const *const pBitmap,
* @param pdy Pointer to a variable which shall hold the vertical offset.
*/
static void bitmap_recalculateVector(bitmap_t const *const pBitmap,
unsigned int const x,
unsigned int const y,
unsigned char const x,
unsigned char const y,
char *const pdx,
char *const pdy)
{
@ -168,8 +173,8 @@ static void bitmap_recalculateVector(bitmap_t const *const pBitmap,
* @param nFrameTick Duration of a displayed frame in milliseconds.
* @param fpGetChunk Function that returns an eight-by-one chunk of a bitmap.
*/
void bitmap_scroll(unsigned int const nWidth,
unsigned int const nHeight,
void bitmap_scroll(unsigned char const nWidth,
unsigned char const nHeight,
unsigned char const nBitPlanes,
unsigned int const nFrameCount,
unsigned int const nFrameTick,
@ -205,7 +210,6 @@ void bitmap_scroll(unsigned int const nWidth,
for (bitmap.nFrame = 0; bitmap.nFrame < nFrameCount; ++bitmap.nFrame)
{
bitmap_drawViewport(&bitmap, x, y);
bitmap_recalculateVector(&bitmap, x, y, &dx, &dy);
x += bitmap.nWidth > bitmap.nViewportWidth ? dx : 0;
y += bitmap.nHeight > bitmap.nViewportHeight ? dy : 0;

View File

@ -17,14 +17,14 @@
* @param nFrame The current frame number (in case you want to animate sth.).
* @return an eight-by-one chunk of the bitmap packed into an uint8_t typed
*/
typedef uint8_t (*bitmap_getChunk_t)(unsigned int const nBitPlane,
unsigned int const nChunkX,
unsigned int const nChunkY,
typedef uint8_t (*bitmap_getChunk_t)(unsigned char const nBitPlane,
unsigned char const nChunkX,
unsigned char const nChunkY,
unsigned int const nFrame);
void bitmap_scroll(unsigned int const nWidth,
unsigned int const nHeight,
void bitmap_scroll(unsigned char const nWidth,
unsigned char const nHeight,
unsigned char const nBitPlanes,
unsigned int const nFrameCount,
unsigned int const nFrameTick,

View File

@ -6,9 +6,9 @@
#include "laborlogo.h"
static uint8_t laborlogo_getChunk(unsigned int const nBitPlane,
unsigned int const nChunkX,
unsigned int const nChunkY,
static uint8_t laborlogo_getChunk(unsigned char const nBitPlane,
unsigned char const nChunkX,
unsigned char const nChunkY,
unsigned int const nFrame)
{
assert(nChunkX < 6);