1d4afb5ceSopenharmony_ci#include <stdlib.h>
2d4afb5ceSopenharmony_ci#include <stdio.h>
3d4afb5ceSopenharmony_ci#include <string.h>
4d4afb5ceSopenharmony_ci#include <stdint.h>
5d4afb5ceSopenharmony_ci/*
6d4afb5ceSopenharmony_ci * The bitmap mapping for the framebuffer is from top left to right, a strip of 8 vertical
7d4afb5ceSopenharmony_ci * bits from each byte, so there is a block of 128 x 8 px on a stride of 128 bytes.
8d4afb5ceSopenharmony_ci *
9d4afb5ceSopenharmony_ci * The 8 bits from the first byte in the fb are the leftmost vertical strip of 8, then the
10d4afb5ceSopenharmony_ci * next byte is the 8 pixels one to the right, until the 127th byte if the vertical strip
11d4afb5ceSopenharmony_ci * of 8 on the rhs.
12d4afb5ceSopenharmony_ci *
13d4afb5ceSopenharmony_ci * +----------------------------------+
14d4afb5ceSopenharmony_ci * |0                                 |
15d4afb5ceSopenharmony_ci * |1                                 |
16d4afb5ceSopenharmony_ci * |2                                 |
17d4afb5ceSopenharmony_ci * |3                                 |
18d4afb5ceSopenharmony_ci * |4                                 |
19d4afb5ceSopenharmony_ci * |5                                 |
20d4afb5ceSopenharmony_ci * |6                                 |
21d4afb5ceSopenharmony_ci * |7                                 |
22d4afb5ceSopenharmony_ci *
23d4afb5ceSopenharmony_ci * In this way the fb is more like (8 x vertical (128 x 8))
24d4afb5ceSopenharmony_ci *
25d4afb5ceSopenharmony_ci */
26d4afb5ceSopenharmony_ci
27d4afb5ceSopenharmony_ci
28d4afb5ceSopenharmony_cistatic const uint8_t scan[] = {
29d4afb5ceSopenharmony_ci
30d4afb5ceSopenharmony_ci#include "pic.h"
31d4afb5ceSopenharmony_ci};
32d4afb5ceSopenharmony_ci
33d4afb5ceSopenharmony_ci/*
34d4afb5ceSopenharmony_ci * input byte 0 is like ABCDEFGH, one bit per horizontal pixel for one line
35d4afb5ceSopenharmony_ci * on an hstride of 16 bytes
36d4afb5ceSopenharmony_ci *
37d4afb5ceSopenharmony_ci * output byte 0 =  b0 = byte 0 b0, b1 = byte16 b0, b2 = byte24 b0 etc
38d4afb5ceSopenharmony_ci *
39d4afb5ceSopenharmony_ci * px(0,0) --> byte0 b0
40d4afb5ceSopenharmony_ci * px(0,1) --> byte0 b1
41d4afb5ceSopenharmony_ci */
42d4afb5ceSopenharmony_ci
43d4afb5ceSopenharmony_ciint
44d4afb5ceSopenharmony_cimain(void)
45d4afb5ceSopenharmony_ci{
46d4afb5ceSopenharmony_ci	const uint8_t *p = scan;
47d4afb5ceSopenharmony_ci	uint8_t r[1024];
48d4afb5ceSopenharmony_ci	int x, y, t = 0;
49d4afb5ceSopenharmony_ci
50d4afb5ceSopenharmony_ci	memset(&r, 0, sizeof(r));
51d4afb5ceSopenharmony_ci
52d4afb5ceSopenharmony_ci	while (t < 1024) {
53d4afb5ceSopenharmony_ci
54d4afb5ceSopenharmony_ci		for (x = 0; x < 128; x++) {
55d4afb5ceSopenharmony_ci			for (y = 0; y < 8; y++) {
56d4afb5ceSopenharmony_ci				if (p[t + (16 * y) + (x / 8)] & (1 << (7 - (x & 7))))
57d4afb5ceSopenharmony_ci					r[t + x] |= 1 << y;
58d4afb5ceSopenharmony_ci			}
59d4afb5ceSopenharmony_ci		}
60d4afb5ceSopenharmony_ci
61d4afb5ceSopenharmony_ci		t += 128;
62d4afb5ceSopenharmony_ci	}
63d4afb5ceSopenharmony_ci
64d4afb5ceSopenharmony_ci	for (x = 0; x < 1024; x++) {
65d4afb5ceSopenharmony_ci		printf("0x%02X, ", r[x]);
66d4afb5ceSopenharmony_ci		if ((x & 0xf) == 0xf)
67d4afb5ceSopenharmony_ci			printf("\n");
68d4afb5ceSopenharmony_ci	}
69d4afb5ceSopenharmony_ci}
70d4afb5ceSopenharmony_ci
71