gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

MachiKaniaで日本語表示

[caption id="attachment_4051" align="alignnone" width="800"]日本語表示テスト 日本語表示テスト[/caption]

日本語表示テストをしました。上の写真のソースコードはこちらから

https://github.com/elect-gombe/fontx2machikania

FONTX2の説明を書いたことがなかったので載せます。

FONTX2形式は日本語表示などに使われます。最近のコンピュータはフォント表示にアウトラインフォントを持ち入りますが、マイコンで扱うには負荷が高いのでマイコンではよくビットマップフォントが用いられます。このビットマップの種類の一つがFONTX2です。

ShiftJISを文字コードとしています。フォントファイルは全角と半角で分かれています。全角では約8000字入っているので容量が大きくなります。Flashに埋め込む際はこの容量を注意する必要があります。8x8の場合は60kBくらいになります。

FONTX2形式を埋め込むのは結構Flash大食いと思ったんですが、第一水準だけサポートすればサイズが半分になるのでメモメモ。8x8だとコードブロックは50ほどまで下がり、コードサイズは30k台まで下がりました。

ただし例えば「鬱」とか「丼」とか消えます。消えた文字は生き返りません。ではFONTX2形式について説明しましょう。

以後全角の場合について。

FONTX2形式ではヘッダ部とデータブロックテーブル部とフォント本体に分かれる。コードブロックテーブル部にはフォント本体をどのように配置するかを示す。フォントは断続的に配置されているが、そのコードをフォントの実体としてどこコードからどこコードまで、その次がどこコードからどこコードまでというように配置する。そのためコードを取得する際にはこのブロックがないと読み取ることができない。

ヘッダ部にはフォント名などの情報の他にフォントサイズや半角か全角識別子、コードブロックテーブルサイズを含む。

フォント本体にはビットマップフォントが格納されている。これが一番大きいサイズとなる。

全角についてはフォントサイズが非常に大きい。8x8で第一水準だけで3000文字あり、一文字8byteなので24kBになります。ただし漢字以外にもひらがなやカタカナ、記号を含めると30kB以上になります。

逆に半角では一文字8byteで256文字固定なので2kほどで済みます。そのため比較的小さい領域で使用可能です。

フォントサイズについてまとめました。だいたいですので。フォントのサポートによって異なります。

8x8全角 第一水準だけ 30k 第二水準フルで入れると58k 12x12全角 第一水準だけ 90k 第二水準も含めると 180k 16x16全角 第一水準だけ 120k 第二水準も含めると 230k

半角では小さいのであまり気にすることがありませんが、一応紹介します。半角ではフォントの縦横比が違いますので代表値のみ示します。 6x8 2KB 6x12 3kB 8x16 4kB

見ればわかると思いますが、横幅に関して8ドットごとに1バイトで切り上げです。なので全角は8x8と12x12は3倍容量が違います。これはしょうがないですね。

エディタ日本語版

Editorの一部を日本語化しました。日本語というものは非常に文字の種類が多くて困ります。PCG空間が256あってもすでに英文字などでほとんど埋まっています。今回の日本語化も同時表示可能数を超えると文字化けが発生します。(以前表示した文字に置き換わってしまう)。

搭載フォントはMISAKIフォントの第一水準だけサポート版です。30KBほどに収まりました。必要の時に必要なフォントをPCG空間にコピーします。ただし超えたぶんに関しては最初の文字から消去します。

このため表示可能数は100字未満(数えてないけど)になります。古い文字は新しい字に置き換わってしまいます。そのためメッセージ部の一部が化けます。

img_2735

img_2736