/*****************************************************************************/
/* pcespr16.c                                                                */
/* PCE Sprite BitPlane Decoder Module (16-color)                             */
/* (c) 2002 Dave Shadoff                                                     */
/*****************************************************************************/
#include "dm.h"

void startup()
{
   export.help = SystemHelp;
}

int tile_pack(unsigned char *dest,const unsigned char *src,int width,int height)
{
   int i, j, pix;

   for(i = 0; i < 128; i++) {
      dest[i] = 0;
   }

   for(i = 0; i < 16; i++) {
      for(j = 0; j < 8; j++) {
         pix = (128 >> j);

         dest[1]  |= (src[j] & 1) ? pix:0;
         dest[33] |= (src[j] & 2) ? pix:0;
         dest[65] |= (src[j] & 4) ? pix:0;
         dest[97] |= (src[j] & 8) ? pix:0;

         dest[0]  |= (src[j+8] & 1) ? pix:0;
         dest[32] |= (src[j+8] & 2) ? pix:0;
         dest[64] |= (src[j+8] & 4) ? pix:0;
         dest[96] |= (src[j+8] & 8) ? pix:0;
      }

      dest += 2;
      src  += 16;
   }
   return 128;
}

int tile_unpack(unsigned char *dest,const unsigned char *src,int width,int height)
{
   int i, j, pix;

   for(i = 0; i < 16; i++) {
      for(j = 0; j < 8; j++) {
         pix = (128 >> j);

         dest[j]   = ( ( (src[1]  & pix) ? 1:0 ) |
                       ( (src[33] & pix) ? 2:0 ) |
                       ( (src[65] & pix) ? 4:0 ) |
                       ( (src[97] & pix) ? 8:0 ) );

         dest[j+8] = ( ( (src[0]  & pix) ? 1:0 ) |
                       ( (src[32] & pix) ? 2:0 ) |
                       ( (src[64] & pix) ? 4:0 ) |
                       ( (src[96] & pix) ? 8:0 ) );
      }

      src  += 2;
      dest += 16;
   }
   return 128;
}

/* you must define an EXPORTSTRUC with 'export' in order to export data */
static EXPORTSTRUC export =
{
/*entry*/         startup,
/*tile_pack*/     tile_pack,
/*tile_unpack*/   tile_unpack,
/*update*/        NULL,
/*save*/          NULL,
/*minwidth*/      16,
/*minheight*/     16,
/*maxwidth*/      16,
/*maxheight*/     16,
/*bpp*/           4,
/*maxpal*/        2,
/*modestr*/       "PCE SPRITE",
/*help*/          NULL,
/*key*/           { 0, 0, 0, 0 },
/*KeyHandler*/    { NULL, NULL, NULL, NULL }
};

