H8,SH,マイコン,ぼやき川柳,ダウンロード


 取り敢えず絵が出るようになると、グラフィックLCDで誰でも考えるのが、AD変換してオシロスコープ モ・ド・キの作成。しかし、"CHAP1"に含まれているSERIKAフォントは8×16で見栄えは良いのですが、6行しか表示出来ません。(貧乏性なので)もう少し小さなフォントが欲しくなりました。
 "フォント フリー"で色々検索しましたが出てくるのはTRUE TypeかOPEN Typeのフォント。流石にCソースで提供されるフォントは存在しません。そんな時に東雲フォントを見付けました。ライセンス的には少し不安がありますが、まぁ、商用利用ではないし・・、。天下の日立が目くじら立てることもないでしょう。東雲フォントは、非常に理解しやすいBDF形式で提供されています


B2c


東雲フォントに同梱されているツールにBDF to bin と言うのがあります。正直awkも知らないし、中で何をやっているかも分かりませんでした。いつもの様に適当にいじって(結構、awkのシキタリを理解するのに苦労しましたが)BDFファイルからCソースを生成するツールを作成しました。但し、文字コードのオフセットを意識していないので、全く実用的ではありません。16×16の漢字/グリフを表示して見たかっただけです。コンソールとして機能することは出来ません

#!@GAWK@ -f
#      
#	* public domain *
#
BEGIN {
	printf("/******************************************************************************\n");
	printf("                      Shinonome Font Table.                                    \n");
	printf("******************************************************************************/\n");
	printf("\n");
	printf("const unsigned short int FONT_DATA[30000] = {\n");
}
END {
	printf("\n};\n");
}

{
xxxx = "";
for ( i=0; i<4; i++) 
{
hhhh = substr($0,i*4+1,4);
#printf ("\n%s ",hhhh);

switch(hhhh) {
	case "....":
		xxxx = xxxx  "0";		break;
	case "...@":
		xxxx = xxxx  "1";		break;
	case "..@.":
		xxxx = xxxx  "2";		break;
	case "..@@":
		xxxx = xxxx  "3";		break;
	case ".@..":
		xxxx = xxxx  "4";		break;
	case ".@.@":
		xxxx = xxxx  "5";		break;
	case ".@@.":
		xxxx = xxxx  "6";		break;
	case ".@@@":
		xxxx = xxxx  "7";		break;
	case "@...":
		xxxx = xxxx  "8";		break;
	case "@..@":
		xxxx = xxxx  "9";		break;
	case "@.@.":
		xxxx = xxxx  "A";		break;
	case "@.@@":
		xxxx = xxxx  "B";		break;
	case "@@..":
		xxxx = xxxx  "C";		break;
	case "@@.@":
		xxxx = xxxx  "D";		break;
	case "@@@.":
		xxxx = xxxx  "E";		break;
	case "@@@@":
		xxxx = xxxx  "F";		break;
	case "ENDC":
		printf ("\n");			break;
        default:
		next;				break;
	}
}
printf("0x%s,", xxxx);
xxxx = "";
}
 


東雲フォント 明朝 16×16 部分


12×12に挑戦する前に8の倍数の(明朝) 16×16をCソースに変換してみます

 

変換したCソース 部分


 


東雲フォント 明朝 16×16





ブツブツ

SH用に生成したgcc(が生成したオブジェクトは)は突然、意味不明の動きをします。正確にはt_printf()を1回出力して停止。2回目は表示しません
文法も変で最後の"}"の後に";"を要求します
ダウンロードしたサンプルソースもくだらないワーニングが残っています
速く、HEWに戻らなくては・・・。

KANJIフォルダからコピー


このままでは全く使い道が無いので同じ16×16の中のkanjiフォルダからASCII文字だけ抽出して明朝BDFの先頭に追加しました


16明朝コンソール




ソース

LCDtest


LCDtest.c

 
SCIFのイニシャライズはシリアルダウンローダで行うので"CPU_UartInitialize()"は行いません。

LCDpanel

LCDpanel.c

 

LCDpanel.h

 
 

graphics

graphics.c


graphics.h

 
 

grphcon

grphcon.c


grphcon.h

 
 

L


 

東雲 12x12


スクロールが上手く行きません


LCDtest.c

 

grphcon.c

BDF to C Sorce 12x12用


なかなかエレガントでしょう? 自画自賛!

#!@GAWK@ -f
#      
#	* public domain *
#
BEGIN {
	printf("/******************************************************************************\n");
	printf("           Shinonome Font Table.  (12*12)    BDF to C Source                   \n");
	printf("******************************************************************************/\n");
	printf("\n");
	printf("const unsigned short int FONT_DATA[30000] = {\n");
}
END {
	printf("\n};\n");
}

{
xxxx = "";
for ( i=0; i<3; i++) 
{
hhhh = substr($0,i*4+1,4);
#printf ("\n%s ",hhhh);

switch(hhhh) {
	case "....":	xxxx = xxxx  "0";	break;
	case "...@":	xxxx = xxxx  "1";	break;
	case "..@.":	xxxx = xxxx  "2";	break;
	case "..@@":	xxxx = xxxx  "3";	break;
	case ".@..":	xxxx = xxxx  "4";	break;
	case ".@.@":	xxxx = xxxx  "5";	break;
	case ".@@.":	xxxx = xxxx  "6";	break;
	case ".@@@":	xxxx = xxxx  "7";	break;
	case "@...":	xxxx = xxxx  "8";	break;
	case "@..@":	xxxx = xxxx  "9";	break;
	case "@.@.":	xxxx = xxxx  "A";	break;
	case "@.@@":	xxxx = xxxx  "B";	break;
	case "@@..":	xxxx = xxxx  "C";	break;
	case "@@.@":	xxxx = xxxx  "D";	break;
	case "@@@.":	xxxx = xxxx  "E";	break;
	case "@@@@":	xxxx = xxxx  "F";	break;
	case "ENDC":	printf ("\n");		break;
        default:	next;			break;
	}
}
xxxx = xxxx  "0";
printf("0x%s,", xxxx);
xxxx = "";
}

実行例


変換して生成されたCソース


awk


awk


awk


awk


awk


awk


awk


awk


 
 
  

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

管理人/副管理人のみ編集できます