« レトルトカレー | トップページ | マッピーのマップ »

2016年2月16日 (火)

マッピーのフォント

マッピーを作るとなると、仮想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を使って読み出す必要がある。

« レトルトカレー | トップページ | マッピーのマップ »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/64282655

この記事へのトラックバック一覧です: マッピーのフォント:

« レトルトカレー | トップページ | マッピーのマップ »

最近のトラックバック