protected virtual void DrawBitsN(Surface s, PixelNavigator dst, System.Collections.Generic.IList <byte> src, int srcPos, byte bpp, int drawTop, int width, int height)
{
if (bpp != 1 && bpp != 2 && bpp != 4 && bpp != 8)
{
throw new ArgumentException("Invalid bpp", "bpp");
}
byte bits = src[srcPos++];
byte numbits = 8;
var cmap = Vm.CharsetColorMap;
for (int y = 0; y < height && y + drawTop < s.Height; y++)
{
for (int x = 0; x < width; x++)
{
int color = (bits >> (8 - bpp)) & 0xFF;
if (color != 0 && (y + drawTop >= 0))
{
dst.Write(cmap[color]);
}
dst.OffsetX(1);
bits <<= bpp;
numbits -= bpp;
if (numbits == 0)
{
bits = src[srcPos++];
numbits = 8;
}
}
dst.Offset(-width, 1);
}
}