『 LCD−IOCS拡張プログラム 』         かぐの☆かこ −− まえがき −−  PC-1600Kでのプログラミングするときに基本となるのがIOCSですが、これを解析したところ、工学社「PC-1600Kデータブック」に掲載されていない様々なことが新たにわかりました。その中の1つが、「IOCSの中でも基本的な入出力を受け持つLCD-IOCSとKEY-IOCSとUART-IOCSはユーザーが拡張することができる」ということです。  PC-1600Kは2行モード画面でしか漢字を表示することができませんが、LCD-IOCSを拡張することによって4行モードにおいても漢字を表示することが可能になりますので、これを今回発表することにします。 −− プログラムの入力 −−  NEW "S0:",&35E  と入力して、&C0C5番地から&C35D番地までを機械語エリアとして確保します。  機械語エリアを確保したら、ダンプリストを入力します。  入力が終ったら、BSAVEでセーブしておきます。 −− プログラムの使い方 −−  CALL &C0C5  と入力し、機械語プログラムを実行します。するとLCD-IOCSを拡張し、すぐにBASICに戻ってきます。これで4行モードで漢字が表示可能になりました。CTRL+f.1キーで2行モードと4行モードとを切り換えて、漢字のファイルをロードして表示してみましょう。  一つ注意ですが、IOCSの拡張は電源をOFFにするとリセットされてしまいます。その時は、電源ONの時に再度CALL &C0C5を実行してください。 −− IOCSコールについて −−  このプログラムでは、LCD-IOCSの「PRT KNJ」と「PRT KSTR」の2つを拡張します。ここでは「PRT KNJ」について説明します。「PRT KSTR」については同様なので省略します。  「PRT KNJ」IOCSは、DEレジスタに漢字コードを入れてエントリ・アドレス0103Hをコールすることで、漢字を1文字表示します。(しかし、4行モードでは漢字を表示せずにDEレジスタの2バイトをANK2文字として表示してしまいます。)  エントリ・アドレス0103Hの内容は「DFH,03H,80H」となっています。これは、RST命令を使って、「(1) 現在のバンク状態をスタックの保存する。(2) バンク#6の8003Hを呼び出す。(3) RETでバンク復帰ルーチンに戻り、0103Hのところには戻らない。」という動作をします。バンク#6の8003Hは、IOCSを処理するためのROMの中であり、「JP 9097H」が書いてあります。バンク#6の9097Hが「PRT KNJ」IOCSの本体なのです。 −− IOCS拡張の方法 −−  どのようにしてIOCS-ROMの中にある「PRT KNJ」IOCSを拡張するかということについて説明します。  上述の、9097番地の冒頭には、「CALL 00BEH」と「CALL 0073」が置かれています。00BEH番地は「CALL F0A2H」となっており、0073H番地は「CALL F09DH」となっています。F09DH番地とF0A2H番地は、RAMのワークエリア中にあり、それぞれIOCSのフックでありユーザーが自由に書き換えることができます。通常は「INC SP,INC SP,RET」であり、何もしません。ここを自作の4行漢字表示ルーチンへのJPに書き換えることで、「PRT KNJ」IOCSを拡張します。ここでは、「GET KFONT」IOCS(#3,405AH)を使って16×16ドットのフォントを漢字ROMから取り出して、12×8ドットに縮小してLCDに表示しています。  漢字フォントの縮小アルゴリズムは、'90年9月に発表したPC-E500漢字ドライバ用フォント作成プログラムとして、ポケット通信V2で公開したアルゴリズムと同一です。16×16ドットを一度16×8ドットに縮小し、それから12×8に縮小するということをしています。 −− 謝辞 −−  MARo氏には、今回のIOCS拡張法について初期の1600KのROMでも可能であることを確認していただきました。同氏には私が作成している未公開IOCS表の添削をしていただいております。また、IOCS拡張法と未公開IOCSについてポケット通信V2でもいくつか動作レポートのメールを頂きました。この場を借りてお礼申し上げます。 −− 参考文献 −−  「PC-1600Kデータブック」 工学社