かなり昔にAVRマイコンで、データロガーを作成した時、既に漢字の表示
は対応していたが、RL78でも漢字に対応した。
表示フォントは12ピクセルを使う。
これは、表示の限界(難しい漢字は、判読出来ないが・・)少しでも情報量
を多くしたいのが理由としてある、16ピクセルの方が判読しやすいが、表
示のバランス的には12ピクセルの方が好みな感じ。
但し、いくつか制限がある、漢字のビットマップフォントを置く容量が無い
為、どこか別途、配置する必要がある。
※RL78(256Kデバイスなら、Flashに置く事が可能)
・12ピクセルフォントで、136キロバイト程の容量が必要。
・1MビットのEEPROMにも入らない。
・SDカードを接続するシステムなら、SDカード上に漢字ビットマップを
置く事で、描画が可能。
・キャッシュを設ける事で描画パフォーマンスを最適化。
12ピクセルのフリーフォントは色々あるけれども、今回は、蕨12を使った。
フォントデータはBDF形式なので、展開して、バイナリーデータにする。
この際、SJIS形式の並びとした、そうする事で、効率良く配置でき、無駄
が比較的少ない。
SJISのコードから、漢字のリニアアドレスを得る関数として、以下のコード
を使う。
static uint16_t sjis_to_liner_(uint16_t sjis) { uint16_t code; uint8_t up = sjis >> 8; uint8_t lo = sjis & 0xff; if(0x81 <= up && up <= 0x9f) { code = up - 0x81; } else if(0xe0 <= up && up <= 0xef) { code = (0x9f + 1 - 0x81) + up - 0xe0; } else { return 0xffff; } uint16_t loa = (0x7e + 1 - 0x40) + (0xfc + 1 - 0x80); if(0x40 <= lo && lo <= 0x7e) { code *= loa; code += lo - 0x40; } else if(0x80 <= lo && lo <= 0xfc) { code *= loa; code += 0x7e + 1 - 0x40; code += lo - 0x80; } else { return 0xffff; } return code; }
BDF形式を展開して、バイナリーデータを作成するアプリケーションは、以前に
作成した「bmc」を使う。
ビットマップ変換
この変換プログラムをコンパイルするには、mingw64 か、OS-X(Linux)で行なう必
要がある、詳細は、glfw3_app を参照して欲しい。
また、バイナリーデータは、蕨12フォントSJISバイナリーに置いてある。
漢字表示のアプリとして、ファイラーを作成した。
RL78/G13 SD カード LCD ファイラー
SDカード上のファイル選択の様子:
・LCDの横幅を超えるファイルは、自動でスクロールする。
・選択中は、反転表示。
・ディレクトリーの移動が可能。