マッピーのフォント
マッピーを作るとなると、仮想V-RAMが必要になる。仮想V-RAMを使うと、背景との合成も簡単だし、ちらつきも軽減できる。
その仮想V-RAMだが、LCDのサイズに合わせると、128×48÷8=768byteが必要になる。
RAMはたったの2014byteしかないから、ヒープに512byte、仮想V-RAMに768byte、残りはわずか734byteである。
プログラム作り始めて間もないというのに、もうメモリを節約しながらのプログラミングである。
そういえば、先日のnamcoフォントはボツ。小さなLCDに8×8ドットのフォントは合わない。
幅4ドット前後のプロポーショナルフォントを描き直した。
▽あとで画像
幅が一定ではないため、文字コードからフォントデータを求めるテーブルを用意した。
// ----------------------------------------
// プロポーショナルフォントテーブル
// byteなので、フォントデータは2行以内専用
// ----------------------------------------
PROGMEM const uint8_t FontTable[] = {
0, 5, 10, 15, 20, 25, 30, 35, // 01234567
40, 45, 50, 53, 56, 61, 66, 71, // 89:.<=>?
75, 79, 84, 89, 94, 99,104,109, // ABCDEFG
114,119,123,128,133,138,144,149, // HIJKLMNO
154,159,164,169,174,178,183,189, // PQRSTUVW
195,201,206,210,214,218,224,230, // XYZ+-/*
};
フォントの幅データは用意していない。フォントデータが0x00なら終了と判定すればいいからだ。
ただし空白だけは別処理である。
プログラム中のPROGMEMというのは、変数をROMl領域(プログラムメモリ)に配置する命令だ。
ROMはRAMよりも容量が大きいが、普通の変数のようにアクセスすることはできない。
たとえば、1byteを読み出すには、
pChara = (uint8_t*)FontTable;
pat = (uint8_t)pgm_read_byte_near(pChara);
といった具合に、マクロpgm_read_byte_nearを使って読み出す必要がある。
« レトルトカレー | トップページ | マッピーのマップ »
コメント