漢字フォント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]);
}
}
最終更新:2013年01月11日 00:27