MSX TR TECHHAN JP 03-1

From Z80 Machines Wiki
Jump to: navigation, search

9この章は、MSXマガジン1989年4月号の"MSX2+テクニカル探検隊"の記事を再編集したものです。

3.1 漢字BASICを解析

 MSX2+以降のマシン語やDOS2の特長のひつつは、漢字が使いやすくなったこと。BASICのプログラムの文字列やファイル名にも、漢字を使うことができる。この章では、その漢字BASICの機能をレポートする。

3.1.1 漢字BASICに必要なハードウェア

 どうしたら漢字BASICが使えるか。まず、もっとも基本的なのは、MSX2+やturbo R本体か、DOS2カートリッジをそろえること。どちらにも、漢字BASICのROMが組み込まれているのだ。機能面での両者の違いは、MSX2+やturbo RではSCREEN 10~12の自然画モードを使えること。本体に漢字ROMが内蔵されていること。  このほか、ちょっと特殊な例として注目したいのが、ソニーから発売されている日本語カートリッジの"HBI-J1"。漢字BASICと漢字ROMを内蔵しているので、すでに持っているMSX2を漢字対応にすることができる。  DOS2とMSX2+、turbo Rには、"単漢字変換"の機能がある。これは"読み"や"JISコード"を使って、1文字ずつ漢字を指定するものだ。でもこれでは長い文章を入力するのに不便なので、"MSX-JE"という"連文節変換"機能を追加できる。たとえば"きょうはいいてんきです"という平仮名の文章を、一度に"今日は良い天気です"という漢字かな混じり文にしてくれるのが連文節変換。専用ワープロなどで使われているのと、同じ方式のものなのだ。  表3.1が、そのMSX-JEを内蔵したハードウェアの一覧。本体に内蔵されているなら、そのままで連文節変換機能を使えるし、そうでなければカートリッジを接続すればいい。ただ注意してほしいのは、MSX-JE内蔵=漢字BASIC対応でないこと。はじめにも書いたように、MSX2+やturbo R、DOS2などと組み合わせることで、連文節変換をサポートした漢字BASICが使えるようになるのだ。  MSX-JEには学習機能がある。たとえば"かんじ"という平仮名を変換して、"漢字"と"幹事"と"感じ"の3種類の候補が表示されたとする。この中から"幹事"を選ぶと、次に同じ単語を変換しようとしたときには"幹事"が第1候補になるという仕組み。自分がよく使う単語の優先順位が上がっていくので、使えば使うほど辞書が自分に合って変換の効率がよくなるわけだ。表3.1の"SRAM"の項目が"有"となっているものは、電源を切っても内容が残るメモリーを使って、この学習結果を残すようになっている。

3.1.2 MSX-JE対応ソフトウェアとは

 MSX-JEはただのワードプロセッサや拡張BASICではなく、いろいろなアプリケーションと組み合わせて、連文節変換の機能を使えるようになっている。感じROMや連文節変換辞書のROMになどは比較的高価なので、MSX-JE自体を多くのソフトウェアが共有することは、とっても経済的なのだ。  アプリケーションがMSX-JEを利用する方法は仕様書で定められているので、"MSX-JE対応"と表示されているソフトウェアは、どのMSX-JEとでも組み合わされるようになっている。ただし、表3.1のHALNOTEは、カートリッジとシステムディスクの組み合わせで"HALOS"という専門のOSをつかうようになっているので、HALOS用でないソフトウェアとの組み合わせには制限がある。

3.1.3 漢字ドライバーの動作原理を解説する

 MSXに限らず、コンピューターの内部で漢字を表わす方法を、簡単に説明しておく。まず英字とカタカナは1バイト(8ビット)の値で表わせるけど、漢字を表わすには2バイトの符号が必要になる。JIS(日本工業規格)では、次のように漢字を2バイトの符号で表わしている。

 亜……3021H(第1水準)  腕……4F53H(第1水準)  *……5021H(第2水準)  *……737EH(第2水準)

しかし、この"JISコード"には、英字と漢字が混ざると処理が面倒になりるという問題がある。そこで、JISコードを含むコンピューターが処理しやすいように変換した"シフトJISコード"が、MSXを含む多くのパーソナルコンピューターで使われている。一部では"マイクロソフト漢字コード"とも呼ばれているけど、これはまあ意味のある人だけ覚えておこう。  いずれにせよシフトJISコードは、絵う文字用に作られたソフトウェアを、そのまま、あるいはわずかな修正で、日本語でもだまして使えるのように設計された便利な漢字コード。16ビットパソコンでももっとも普及しているオペレーティングシステムのMS-DOSや、OS-9といった最近話題のオペレーティングシステムにも、シフトJIS漢字コードが使われている。だから、異なるコンピューター間で文書ファイルを交換することも、できるというわけだ。  ところで、漢字コード表を見てみると、感じや英字が混じっていることに気が付く。混乱を避けるために、2バイトの漢字コードで表わされる英字や漢字などを総称して"全角文字"。これに対して1バイトの文字コードで表わされる文字を"半角文字"と呼び、両者を区別することにする。たとえば半角文字の"ABCD"と全角文字の"ABCD"は、まったくべつの文字として扱われるから注意しよう。  それでは、いよいよ本題にはいるぞ。MSX2+とturbo R、DOS2の漢字入出力機能は"漢字ドライバー"と呼ばれている。これは、BASICやDOSに限らず、多くのアプリケーションプログラムが利用できるようになっているものだ。  図3.1にあるのが、漢字ドライバーの動作原理。順を追って説明すると、まずキーボードから入力された全角の"かな"または"ローマ字"を読んで(判断して)、画面に表示する。次にMSX-JEを呼び出し、ひらがなを漢字(全角文字)に変換。最後に、変換された漢字のコードが、BASICまたはDOSをとおして、アプリケーションプログラムに送られるというわけ。  これと逆に、アプリケーションプログラムが画面に文字を表示する場合は、漢字コードを漢字ドライバーに送ればいいわけだ。  この漢字ドライバーは、アプリケーションプログラムによっては、BASICの命令やBIOSコール、BDOSコール(DOSのプログラムが入出力を行うための、BIOSに似た機能)などに、漢字入出力機能が追加されたように見えるだけ。とくにアプリケーションプログラム自身がMSX-JEの辞書を操作しなくてよいことが、漢字ドライバーの大きな利点だ。

3.1.4 JE対応ハード&ソフト

 ここでは参考までに、これまでに発売されたMSX-JE対応のハードをソフトをまとめてみた。

 ・モデムカートリッジ   パナソニック FS-CM1   パナソニック FS-CM820   ソニー HBI-1200   キヤノン VM-300   明星電気 V-3

 ・モデム内蔵MSX   パナソニック FS-A1FM   ソニー HB-T7   ソニー HB-T600   三菱 ML-TS2H

 ・ソフトウェア   ソニー 文書作左衛門   ソニー はがき書右衛門   アスキー MSX-TERM   アスキー MSX-DOS2 TOOLS   アスキー MSX-View

3.1.5 漢字BASICで使える画面モードいろいろ

 MSX2+やturbo Rの画面モードがやたらと多いように、漢字BASICの画面モードも複雑だ。表3.2に掲載したのがその一覧。BASICでは、

 CALL KANJI  WIDTH

命令で。DOS2では

 KMODE  MODE

命令で、それぞれ画面モードを指定するわけだ。たとえば、

 CALL KANJI0 : WIDTH 32

という命令を実行すると、画面は32文字×12行表示になる。同じことをDOS2でやるには、

 KMODE 0  MODE 32

とすればいい。ただし、英語版のシステムを立ち上げた場合は、漢字ドライバーが組み込まれていないから、一度BASICにもどって漢字モードを呼び出そう。  それでは、表3.2の意味を詳しく説明する。まず"画面ドット数"とは、画面に表示される点(ドット)の数。漢字はこの点の組み合わせで表わされる。  縦が424ドットの画面モードでは、"インターレース"という表示方法が使われている。これは縦方向に半ドットずらした2枚の画面を交互に表示し、結果として画面のドット数を増やす方法。ただ、画面がちらつくため、目が疲れすいのが欠点だ。  "漢字ドット数"とは、1個の漢字を表わすための点の数。普通は漢字を16×16ドットで表わすけれど、横12×縦16ドットに圧縮して、横512ドットの画面に40文字の漢字を表示することも可能だ。また、パナソニックのモデムカートロッジを接続すれば、内蔵されている12×12ドットの漢字ROMが、自動的に選択される。"半角文字"では、画面に表示される半角文字の桁数と行数。当然のことながら、全角文字(漢字)の場合は桁数が表の値の半分になるわけだ。  ここで、ひとつ注意しておいて欲しいのは、表にある行数のすべてがBASICなどで使えるわけではないこと。ファンクションキーの表示や、漢字変換のためのエリアで、画面の1~2行は使われてしまう。

3.1.6 漢字テキストと漢字グラフィック

 さて、画面モードには、じつはもっとも複雑な問題がある。BASICで、

 CALL KANJI1  WIDTH 40  SCREEN 0

とうい命令を実行すると、表3.2の上から2番目の画面モードになるのはわかるかな。ここで注目して欲しいのが、"SCREEN 0"を指定しているにもかかわらず、VDPは256×212ドットの"SCREEN 5"の状態になっていること。このような状態を"漢字テキストモード"という。  このモードでは、BASICプログラムの入力や修正、INPUT命令による入力、PRINT文による出力などは問題なく行える。しかし、LINEやPAINTなどのグラフィック機能は使えない。  漢字モードでグラフィックを操作するには、"SCREEN 5"などの命令で、画面を"漢字グラフィックモード"に切り替える必要がある。ただ、覚えておいて欲しいのは、このモードではグラフィック機能と漢字の出力は使えるけれど、原則として漢字の入力はできないこと。間違えないように。以上の画面モードの切り替えを図3.2にまとめておいた。  プログラムが動きはじめるとき、終了するとき、エラーが起きたときなどは、予定どおりに画面モードが設定されているか確認しよう。うっかり"CALL KANJI"を忘れていると、プログラムを入力した直後には正しく動くけど、一度電源を切ってからプログラムをロードし直すと動かない。なんて事態が発生する。  また、漢字グラフィックモードで、"LINE@"命令と"LINE INPUT"命令を使うと、自動的に漢字グラフィックモードに戻っていまう。これを避けるためには、"INPUT$"や"INKEY$"関数でキーボードを読めばいい。

3.1.7 漢字ドライバーの正しい使い方なのだ

 漢字ドライバーは、MSXの漢字機能は実用にならないという過去の常識をくつがえした、"天晴(あっぱれ)"なソフトウェア。だけど、BASICに"あとづけ"されたために、意外な落とし穴がある。いま説明したばかりの、漢字テキストと漢字グラフィックの違いも、そんな秘孔のひとつだ。ここでは、そんな感じドライバーを使う上での注意を列挙する。  MSXをリセットしてから最初に"CALL KANJI"命令が実行されるときに、漢字ドライバーとMSX-JEを利用するためのワークエリアが用意される。そのときにBASICの変数の内容が消滅し、"FOR~NEXT"命令の繰り返し回数や、"RETURN"命令で戻る行番号を記録するための"ソフトウェアスタック"というワークエリアが初期化されてします。たとえば、

 10 A=1  20 CALL KANJI0  30 PRINT A

というプログラムを実行した場合、1回目には"0"が表示される(つまり変数Aの値が0になっている)けど、2回目以降は正しく"1"が表示されるという具合。また、

 10 GOSUB 80  ・  ・  ・  70 END  80 CALL KANJI0  90 RETURN

このようなプログラムを実行すると、"CALL KANJI0"が実行されたとき"RETURN"命令で戻る場所が忘れられ、プログラムの動作がおかしくなってしまうんだ。  このほかにも、漢字ドライバーがメモリー上にワークエリアを確保すると、BASICのワークエリアがそのぶん減ってしまうという問題もある。メモリーの大きさいっぱいのプログラムや、マシン語サブルーチンを使うプログラムでは、メモリーが不足して動かなくなることもあるかもしれない。  漢字ドライバーは、プログラム内部のシフトJISコードを、JISコードに変換して漢字プリンターに印字する機能を持っている。この機能は、BAISCの"LPRINT"命令と、BIOSの"LPRINT"に対して働くものだ。しかし、プリンターを1ドットずつ制御して、グラフィックを印刷する"ビットイメージ印刷"では副作用が出る。そこで、ビットイメージ印字の前には、システムワークエリアの中のF418H番地(RAWPRTと呼ぶ)に0でない値を書き込んで、漢字コードの変換を禁止する必要がある。  さて、これからは、上級者プログラマー向けのもの。まず、表3.3に掲載したものが、漢字ドライバーが書き換えるフックの一覧。ほかのプログラムがこれらのフックを書き換えると、漢字ドライバーが正しく動作しない可能性があるので要注意だ。  次に、フックからインタースロットコールで漢字ドライバーが呼び出されるときには、裏レジスターとIX、IYレジスターの内容が履きされる。したがって、漢字入出力に関係するBIOSについて、これからのレジスターの内容が保存されると考えて作られたプログラムは、漢字モードでは正しく動かない。