void displayTimer_Tick(object sender, EventArgs e)
        {
            if (bitmap == null)
            {
                bitmap          = new Bitmap(DisplayCmd.Width, DisplayCmd.Height, PixelFormat.Format32bppRgb);
                BackgroundImage = bitmap;
                TestImage();
            }

            if (!CommandAvail())
            {
                return;
            }

            var bitmapData = bitmap.LockBits(new Rectangle(0, 0, DisplayCmd.Width, DisplayCmd.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
            var bitmapPtr  = (uint *)bitmapData.Scan0;

            while (CommandAvail())
            {
                bufferReadPos += DisplayCmd.Execute(buffer, bufferReadPos, bitmapPtr);
            }

            bitmap.UnlockBits(bitmapData);
            Invalidate();
        }
        static bool CommandAvail()
        {
            int filled = bufferWritePos - bufferReadPos;

            if (filled >= MaxCmdLength)
            {
                return(true);
            }

            lock (buffers)
            {
                if (buffers.Count > 0)
                {
                    var newBuffer = buffers.Dequeue();
                    if (newBuffer.Length > buffer.Length - bufferWritePos)
                    {
                        Array.Copy(buffer, bufferReadPos, buffer, 0, filled);
                        bufferWritePos -= bufferReadPos;
                        bufferReadPos   = 0;
                    }
                    Array.Copy(newBuffer, 0, buffer, bufferWritePos, newBuffer.Length);
                    bufferWritePos += newBuffer.Length;
                    return(CommandAvail());
                }
            }

            return(filled >= DisplayCmd.CommandLength(buffer[bufferReadPos]));
        }