#include #include #include #include /* * The bitmap mapping for the framebuffer is from top left to right, a strip of 8 vertical * bits from each byte, so there is a block of 128 x 8 px on a stride of 128 bytes. * * The 8 bits from the first byte in the fb are the leftmost vertical strip of 8, then the * next byte is the 8 pixels one to the right, until the 127th byte if the vertical strip * of 8 on the rhs. * * +----------------------------------+ * |0 | * |1 | * |2 | * |3 | * |4 | * |5 | * |6 | * |7 | * * In this way the fb is more like (8 x vertical (128 x 8)) * */ static const uint8_t scan[] = { #include "pic.h" }; /* * input byte 0 is like ABCDEFGH, one bit per horizontal pixel for one line * on an hstride of 16 bytes * * output byte 0 = b0 = byte 0 b0, b1 = byte16 b0, b2 = byte24 b0 etc * * px(0,0) --> byte0 b0 * px(0,1) --> byte0 b1 */ int main(void) { const uint8_t *p = scan; uint8_t r[1024]; int x, y, t = 0; memset(&r, 0, sizeof(r)); while (t < 1024) { for (x = 0; x < 128; x++) { for (y = 0; y < 8; y++) { if (p[t + (16 * y) + (x / 8)] & (1 << (7 - (x & 7)))) r[t + x] |= 1 << y; } } t += 128; } for (x = 0; x < 1024; x++) { printf("0x%02X, ", r[x]); if ((x & 0xf) == 0xf) printf("\n"); } }