漢字ROMからフォントデータを読み出す

漢字フォントROMはI/Oポートの0xD8-0xDBに接続されている。
漢字フォントは16x16ドットのフォントデータを持っている。

このフォントROMは漢字の使用頻度によって第一水準、第二水準という区分があり、
第一水準の漢字フォントをリードする場合は、0xD8,0xD9にアドレスを出力する。
第二水準漢字フォントをリードする場合は0xDA,0xDBにアドレスを出力する。

データの読み出しは第一水準の場合、アドレス送出後、0xD9を32回リードする。
第二水準の場合はアドレス送出後、0xDBを32回リードして16x16フォントデータを得る。

漢字ROMフォントへアドレス出力する場合は2byteを必要とするが、この時のアドレスは
区点コード(漢字フォント格納形式)という特殊な形式で扱う必要がある。
直接文字コードであるSJISコードを出力して漢字フォントを得る仕組みではない。

区点コードアドレスは全てのアドレス領域が利用されている訳ではなく、一部のアドレス範囲に
漢字フォントが割り当てられており、通常それらのフォントマップはアドレスが10進数で記載
されている。

区点コードの一覧表はインターネット上に幾つかの資料を見つける事が出来る。

フォントデータのフォーマットは16x16のビットマップ文字を4分割したピクセルマップとして
記録されている。
フォントサイズは一つなので、16x12ドットなどはフォントデータから新たに作ることになる。

漢字ROMフォントのデータはそれほど大きいものではなく、第一、第二水準をあわせても
最大で256KB程度。

漢字区点コードの96,32を読み出したい場合ROMBASICでは以下のコードとなる

10 dim f%(32)
20 out &hd8,96
30 out &hd9,32
40 for i=0 to 31
50 f%(i)=inp(&hd9)
60 print f%(i)
70 next i

Cでは以下のようなコードとなる。

#include <stdio.h>

void main(void){
	unsigned char f[32];
	int i;

	outp(0xd8,96);
	outp(0xd9,32);

	for(i=0; i<32; i++){
		f[i]=inp(0xd9);
		printf("%d \n",f[i]);
	}
}
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。