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