/*
|
/*
|
* mkinit.c -- generate Verilog defparam statements from C data
|
* mkinit.c -- generate Verilog defparam statements from C data
|
*/
|
*/
|
|
|
|
|
#include <stdio.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
#include <string.h>
|
#include <string.h>
|
|
|
|
|
#define LO_FILE_NAME "chrgenlo.init"
|
#define LO_FILE_NAME "chrgenlo.init"
|
#define HI_FILE_NAME "chrgenhi.init"
|
#define HI_FILE_NAME "chrgenhi.init"
|
|
|
|
|
unsigned char data[] = {
|
unsigned char data[] = {
|
#include "font-8x16"
|
#include "font-8x16"
|
};
|
};
|
|
|
|
|
unsigned char reflect(unsigned char c) {
|
unsigned char reflect(unsigned char c) {
|
unsigned char r;
|
unsigned char r;
|
int i;
|
int i;
|
|
|
r = 0;
|
r = 0;
|
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
r <<= 1;
|
r <<= 1;
|
if (c & 1) {
|
if (c & 1) {
|
r |= 1;
|
r |= 1;
|
}
|
}
|
c >>= 1;
|
c >>= 1;
|
}
|
}
|
return r;
|
return r;
|
}
|
}
|
|
|
|
|
int main(void) {
|
int main(void) {
|
FILE *outFile;
|
FILE *outFile;
|
int i, j;
|
int i, j;
|
unsigned char b[32];
|
unsigned char b[32];
|
|
|
if (sizeof(data) != 256 * 16) {
|
if (sizeof(data) != 256 * 16) {
|
printf("Error: wrong size of data\n");
|
printf("Error: wrong size of data\n");
|
exit(1);
|
exit(1);
|
}
|
}
|
outFile = fopen(LO_FILE_NAME, "w");
|
outFile = fopen(LO_FILE_NAME, "w");
|
if (outFile == NULL) {
|
if (outFile == NULL) {
|
printf("Error: cannot open file '%s'\n", LO_FILE_NAME);
|
printf("Error: cannot open file '%s'\n", LO_FILE_NAME);
|
exit(1);
|
exit(1);
|
}
|
}
|
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
fprintf(outFile, " defparam character_rom_lo.INIT_%02X = 256'h", i);
|
fprintf(outFile, " defparam character_rom_lo.INIT_%02X = 256'h", i);
|
for (j = 0; j < 32; j++) {
|
for (j = 0; j < 32; j++) {
|
b[j] = data[i * 32 + j + 0 * 16];
|
b[j] = data[i * 32 + j + 0 * 16];
|
}
|
}
|
for (j = 31; j >= 0; j--) {
|
for (j = 31; j >= 0; j--) {
|
fprintf(outFile, "%02X", reflect(b[j]));
|
fprintf(outFile, "%02X", reflect(b[j]));
|
}
|
}
|
fprintf(outFile, ";\n");
|
fprintf(outFile, ";\n");
|
}
|
}
|
fclose(outFile);
|
fclose(outFile);
|
outFile = fopen(HI_FILE_NAME, "w");
|
outFile = fopen(HI_FILE_NAME, "w");
|
if (outFile == NULL) {
|
if (outFile == NULL) {
|
printf("Error: cannot open file '%s'\n", HI_FILE_NAME);
|
printf("Error: cannot open file '%s'\n", HI_FILE_NAME);
|
exit(1);
|
exit(1);
|
}
|
}
|
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
fprintf(outFile, " defparam character_rom_hi.INIT_%02X = 256'h", i);
|
fprintf(outFile, " defparam character_rom_hi.INIT_%02X = 256'h", i);
|
for (j = 0; j < 32; j++) {
|
for (j = 0; j < 32; j++) {
|
b[j] = data[i * 32 + j + 128 * 16];
|
b[j] = data[i * 32 + j + 128 * 16];
|
}
|
}
|
for (j = 31; j >= 0; j--) {
|
for (j = 31; j >= 0; j--) {
|
fprintf(outFile, "%02X", reflect(b[j]));
|
fprintf(outFile, "%02X", reflect(b[j]));
|
}
|
}
|
fprintf(outFile, ";\n");
|
fprintf(outFile, ";\n");
|
}
|
}
|
fclose(outFile);
|
fclose(outFile);
|
return 0;
|
return 0;
|
}
|
}
|
|
|