#include #include static char buf[262144]; int newaddr(int a) { int n; n = 0; #ifdef SIMPLE for (int i = 0; i < 18; i++) if (a & (1 << i)) n |= (1 << (17 - i)); #else /* glyph data: address [4:0] connects rom [13:17] */ if (a & (1 << 0)) n |= (1 << 17); if (a & (1 << 1)) n |= (1 << 16); if (a & (1 << 2)) n |= (1 << 15); if (a & (1 << 3)) n |= (1 << 14); if (a & (1 << 4)) n |= (1 << 13); /* glyph index: address [17:5] connects rom [12:0] */ if (a & (1 << 5)) n |= (1 << 0); if (a & (1 << 6)) n |= (1 << 1); if (a & (1 << 7)) n |= (1 << 2); if (a & (1 << 8)) n |= (1 << 3); if (a & (1 << 9)) n |= (1 << 4); if (a & (1 << 10)) n |= (1 << 5); if (a & (1 << 11)) n |= (1 << 6); if (a & (1 << 12)) n |= (1 << 7); if (a & (1 << 13)) n |= (1 << 8); if (a & (1 << 14)) n |= (1 << 9); if (a & (1 << 15)) n |= (1 << 10); if (a & (1 << 16)) n |= (1 << 11); if (a & (1 << 17)) n |= (1 << 12); #endif return n; } int main(int argc, char *argv[]) { int i; FILE *fp; if ((fp = fopen(argv[1], "r")) == NULL) { printf("file open error\n"); return 0; } fread(buf, sizeof(buf), 1, fp); for(i = 0; i < sizeof(buf); i++) putchar(buf[newaddr(i)]); return 0; }