/* This script os meant to convert a 256x256 pixel bitmap into an bitmap of * 8x8 pixel characters. When deciding upon the output format, i had the * video output of scanlines in mind. So there are 8 sections for each row * of pixels for a character cell, each secton containing the the pixel line * data of all 256 character codes. If you align this blob to 256-bytes, you * quickly fetch the data by pointing bx to the begin of the section for the * pixel line you are currently drawing, then set bl to the character value * you want to print and dereference [bx]. */ #include #include #include #include #include #include #include #include #include #include FILE* in; FILE* out; void *addr; void copyline(int c) { uint8_t *ptr = addr + 0x82 + (128/8)*(127 - c); int i; for (i=0; i<16; i++) { fputc(*ptr++, out); } } int main(int argc, char** argv) { struct stat sbuf; in = fopen(argv[1], "r+"); out = fopen(argv[2], "w"); fstat(fileno(in), &sbuf); if (sbuf.st_size != 2178) { printf("File must be a 128x128 pixel 1 bit monochrome bmp\n"); exit(1); } addr = mmap(NULL, sbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(in), 0); int i, j; for(j=0; j<8; j++) { for(i=0; i<16; i++) { copyline(j+i*8); } } }