かんたん手帳リフィルくん
かんたん手帳リフィルくん
に付属しているROMの漢字フォントを使用するための資料です。
MSX2/2+/turboR及びかんたん手帳リフィルくん
の付属ROMが必要です。
リフィルくんの検索
リフィルくん
のROMは、ASCII型のメガROMコントローラを使って16kbytesバンクでマッピングされています。
切り替わるアドレス バンクレジスタのアドレス 4000H〜7FFFH 6000H〜67FFH 8000H〜BFFFH 7000H〜77FFH
Bank0の先頭16bytesには 'SHARSHAR!! 'という文字列('SHARSHAR!!'の後に20Hが6個)が書き込まれており、これを識別子として使用します。バンクレジスタの初期値は、全てのページにおいて0なので、検索時にバンクレジスタを切り替える必要はありません。
1文字に、12bytes使って表現されています。1Lineに1byteですが、bit7〜bit0の内、bit6〜bit1のみがフォントとして扱われ、bit7とbit0は常に0です。
b7 b6 b5 b4 b3 b2 b1 b0 0 Line 0 u u u u u u 0 (0byte目) 1 Line 0 u u u u u u 0 (1byte目) : : : : 11 Line 0 u u u u u u 0 (11bytes目) *uの部分がフォントとして使用されている
フォントは、20H〜7FH・A0H〜DFHのみが連続して搭載されており、00H〜1FH・80H〜9FH・
E0H〜FFHのフォントは存在しません。
1文字に、24bytes使って表現されています。1Lineに2bytes使用されており、各ラインの+0byte目がフォントの左8dotを、+1byte目の上位4bitが右4dotを表しています。
+0byte +1byte b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0 0 Line u u u u u u u u u u u u 0 0 0 0 (0〜1byte目) 1 Line u u u u u u u u u u u u 0 0 0 0 (2〜3bytes目) : : : : : : 11 Line u u u u u u u u u u u u 0 0 0 0 (22〜23bytes目) *uの部分がフォントとして使用されている
フォントは、第一水準のみが搭載されており、第二水準のフォントは存在しません。
また記号の一部が、MSXの標準漢字ROMと異なるようです。
まず、ASCIIコードから20Hを引きます。このとき、繰り下がりが起こるようならば、それはコントロールコードなので、別処理を行います。
次に60H(=80H-20H)と比較し、これより小さければ処理Aに飛びます。
60H以上だった場合、20Hを引いた後に60H(=A0H-40H)と比較し、これより小さければ、リフィルくん
には相当するフォントが存在しないので別処理を行います(半角かな)。
60H以上であれば更にA0H(=E0H-40H)と比較し、これより小さければ処理Aに飛びます。
A0H以上であれば、リフィルくん
には相当するフォントが存在しないので別処理を行います(半角かな)。
処理Aでは、ここまでに求めたコードを12倍し、更にオフセットとして16を加えるとフォントへのポインタを得ます。
まず、区点コードを求めます。この時、第二水準(区が48以上)の文字はリフィルくん
を使わずに処理するよう、コーディングしなければなりません。
区点コードを求めたら、区の値からフォントを得る為のオフセットを求めます。オフセットは次の様になっています。
区 オフセット 1〜7 14080 =4000H-[(21H-20H)*96*24] 16〜22 8192 =4000H*2-[{(30H-20H)*96-512}*24] 23〜29 8192+256 =4000H*3-[{(37H-20H)*96-512}*24] 30〜36 8192+256*2 =4000H*4-[{(3EH-20H)*96-512}*24] 37〜43 8192+256*3 =4000H*5-[{(45H-20H)*96-512}*24] 44〜47 8192+256*4 =4000H*6-[{(4CH-20H)*96-512}*24]
次に区点コードから漢字コードを求めて、これを24倍し、更に先程のオフセットを加えると、フォントへのポインタを得ます。このとき、ポインタが17bitで表現される事に注意して下さい。
まず、スロットを切り替えてリフィルくん
を表に出し、リフィルくん
の出ているページに応じたバンクレジスタ(6000Hか7000H)に0を書き込みます。
次に、リフィルくん
が出ているページの先頭アドレス(4000Hか8000H)にフォントへのポインタを足すと、フォントの先頭アドレスが出ます。このアドレス以降の12bytesが求めるフォントです。
フォントの型式はフォントの種類
を参照して下さい。
まず、スロットを切り替えてリフィルくん
を表に出します。
次に、ポインタ(17bit)の上位3bitをリフィルくん
の出ているページに応じたバンクレジスタ(6000Hか7000H)に書き込んで、バンクを切り替えます。
更に下位14bitにリフィルくん
が出ているページの先頭アドレス(4000Hか8000H)を足すと、フォントの先頭アドレスが出ます。このアドレス以降の24bytesが求めるフォントです。フォントがバンク境界に掛かることはありません。
フォントの型式はフォントの種類
を参照して下さい。
プログラム終了時には、必ずバンクレジスタに0を書き込んで下さい。これは、他のプログラムがリフィルくん
を発見出来るようにするための処置です。