#include #include #include #define FILESIZE 2097152 #define X_CHAR 96 #define Y_CHAR 86 #define X_SIZE 24 #define Y_SIZE 24 #define OFFSET 0 // 0x000000:mincho, 0x100000:gothic static uint8_t buf[FILESIZE]; static uint8_t px[Y_CHAR * Y_SIZE][X_CHAR * X_SIZE]; int get_charno(int ku, int ten) { int n; if (ku >= 80) { n = (ku - 80) * 128 + (ten % 32) + 1024 * (ten / 32) + 5120; } else if (ku >= 16) { n = (ku - 16) * 128 + ten + 32; } else if (ku >= 8) { if (ten >= 64) { if (ku >= 12) { n = (ku - 12) * 128 + (ten % 32) + 7680; } else { n = (ku - 8) * 128 + (ten % 32) + 6656; } } else if (ten >= 32) { n = (ku - 8) * 128 + (ten % 32) + 4096; } else { n = (ku - 8) * 128 + (ten % 32); } } else { n = (ku + 8) * 128 + (ten % 32) + 1024 * (ten / 32); } if (n >= 8192) n = -1; return n; } int loadfile(char *filename, int offset) { int i; FILE *fp; fp = fopen(filename, "r"); if (fp == NULL) { printf("loadfile: %s open error\n", filename); return -1; } for (i = 0; i < FILESIZE; i++) { buf[i] = fgetc(fp); } fclose(fp); return 0; } void draw_char(int x, int y, int n, int offset) { int dx, dy; uint32_t d, m; x *= X_SIZE; y *= Y_SIZE; m = 1 << (X_SIZE - 1); for (dy = 0; dy < Y_SIZE; dy++) { if (n >= 0) { d = ((buf[n * 128 + dy * 4 + 0 + offset] << 16) | (buf[n * 128 + dy * 4 + 1 + offset] << 8) | (buf[n * 128 + dy * 4 + 2 + offset] << 0)); } else { d = ~0; } for (dx = 0; dx < X_SIZE; dx++) { if (d & (m >> dx)) { px[y + dy][x + dx] = 1; } else { px[y + dy][x + dx] = 0; } } } return; } int main(int argc, char *argv[]) { int n, x, y, c; loadfile("j8sx0062.bin", 0); for (y = 0; y < Y_CHAR; y++) { for (x = 0; x < X_CHAR; x++) { n = get_charno(y, x); draw_char(x, y, n, OFFSET); } } for (y = 0; y < Y_CHAR * Y_SIZE; y++) { for (x = 0; x < X_CHAR * X_SIZE; x++) { c = px[y][x] ? 0xff : 0x00; putchar(c); putchar(c); putchar(c); } } return 0; }