Let's use かんたん手帳リフィルくん

1 概要

かんたん手帳リフィルくんに付属しているROMの漢字フォントを使用するための資料です。

2 必要とする環境

MSX2/2+/turboR及びかんたん手帳リフィルくんの付属ROMが必要です。

3 使用方法

3.1 リフィルくんの検索

リフィルくんのROMは、ASCII型のメガROMコントローラを使って16kbytesバンクでマッピングされています。

切り替わるアドレスバンクレジスタのアドレス
4000H〜7FFFH6000H〜67FFH
8000H〜BFFFH7000H〜77FFH

Bank0の先頭16bytesには 'SHARSHAR!! 'という文字列('SHARSHAR!!'の後に20Hが6個)が書き込まれており、これを識別子として使用します。バンクレジスタの初期値は、全てのページにおいて0なので、検索時にバンクレジスタを切り替える必要はありません。

3.2 フォントの種類

3.2.1 半角 6x12dot

1文字に、12bytes使って表現されています。1Lineに1byteですが、bit7〜bit0の内、bit6〜bit1のみがフォントとして扱われ、bit7とbit0は常に0です。

b7b6b5b4b3b2b1b0
0 line0uuuuuu00byte目
1 line0uuuuuu01byte目
::
11 line0uuuuuu011bytes目
uの部分がフォントとして使用されている

フォントは、20H〜7FH・A0H〜DFHのみが連続して搭載されており、00H〜1FH・80H〜9FH・E0H〜FFHのフォントは存在しません。

3.2.2 全角 12x12dot

1文字に、24bytes使って表現されています。1Lineに2bytes使用されており、各ラインの+0byte目がフォントの左8dotを、+1byte目の上位4bitが右4dotを表しています。

+0byte+1byte
b7b6b5b4b3b2b1b0b7b6b5b4b3b2b1b0
0 lineuuuuuuuuuuuu00000〜1byte目
1 lineuuuuuuuuuuuu00002〜3byte目
:::
11 lineuuuuuuuuuuuu000022〜23byte目
uの部分がフォントとして使用されている

フォントは、第一水準のみが搭載されており、第二水準のフォントは存在しません。 また記号の一部が、MSXの標準漢字ROMと異なるようです。

3.3 フォントへのポインタ取得

3.3.1 半角

まず、ASCIIコードから20Hを引きます。このとき、繰り下がりが起こるようならば、それはコントロールコードなので、別処理を行います。
次に60H(=80H-20H)と比較し、これより小さければ処理Aに飛びます。
60H以上だった場合、20Hを引いた後に60H(=A0H-40H)と比較し、これより小さければ、リフィルくんには相当するフォントが存在しないので別処理を行います(半角かな)。
60H以上であれば更にA0H(=E0H-40H)と比較し、これより小さければ処理Aに飛びます。
A0H以上であれば、リフィルくんには相当するフォントが存在しないので別処理を行います(半角かな)。
処理Aでは、ここまでに求めたコードを12倍し、更にオフセットとして16を加えるとフォントへのポインタを得ます。

3.3.2 全角

まず、区点コードを求めます。この時、第二水準(区が48以上)の文字はリフィルくんを使わずに処理するよう、コーディングしなければなりません。
区点コードを求めたら、区の値からフォントを得る為のオフセットを求めます。オフセットは次の様になっています。

オフセット
1〜714080=4000H-[(21H-20H)*96*24]
16〜228192=4000H*2-[{(30H-20H)*96-512}*24]
23〜298192+256=4000H*3-[{(37H-20H)*96-512}*24]
30〜368192+256*2=4000H*4-[{(3EH-20H)*96-512}*24]
37〜438192+256*3=4000H*5-[{(45H-20H)*96-512}*24]
44〜478192+256*4=4000H*6-[{(4CH-20H)*96-512}*24]

次に区点コードから漢字コードを求めて、これを24倍し、更に先程のオフセットを加えると、フォントへのポインタを得ます。このとき、ポインタが17bitで表現される事に注意して下さい。

3.4 フォントの取得

3.4.1 半角

まず、スロットを切り替えてリフィルくんを表に出し、リフィルくんの出ているページに応じたバンクレジスタ(6000Hか7000H)に0を書き込みます。
次に、リフィルくんが出ているページの先頭アドレス(4000Hか8000H)にフォントへのポインタを足すと、フォントの先頭アドレスが出ます。このアドレス以降の12bytesが求めるフォントです。
フォントの型式はフォントの種類を参照して下さい。

3.4.2 全角

まず、スロットを切り替えてリフィルくんを表に出します。
次に、ポインタ(17bit)の上位3bitをリフィルくんの出ているページに応じたバンクレジスタ(6000Hか7000H)に書き込んで、バンクを切り替えます。
更に下位14bitにリフィルくんが出ているページの先頭アドレス(4000Hか8000H)を足すと、フォントの先頭アドレスが出ます。このアドレス以降の24bytesが求めるフォントです。フォントがバンク境界に掛かることはありません。
フォントの型式はフォントの種類を参照して下さい。

3.5 後処理

プログラム終了時には、必ずバンクレジスタに0を書き込んで下さい。これは、他のプログラムがリフィルくんを発見出来るようにするための処置です。


Web master: Nakayama Atsushi
E-mail: anaka@yo.rim.or.jp