※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
MSX-JE仕様とは、MSX日本語入力フロントエンドプロセッサのインターフェイスを規定するものです。これは、MSX上のアプリケーションソフトウェア(以下、AP)と日本語入力処理を分離し、容易に日本語入力を行えるようにするためのインターフェイスです。
MSX-JEの仕様に沿って作成することにより、図7.46のようにAPといろいろな種類のフロントエンドプロセッサ(以下、FEP)を自由に組み合わせることができます。そして、複数のAPで同一のFEPを共有したり、APを変更しないで、FEPのみをより高機能なものに発展させたりすることが可能になります。
MSX-JEは大きく分けて、
- 仮想端末入力インターフェイス
- 辞書インターフェイス
の2つから構成されています。(図7.47参照)
仮想端末入力インターフェイスを使用するときは、かな漢字変換入力時にはAPは単にスクリーンへのメッセージ出力を行うだけです。つまり、APは、BIOSの文字入力を使用するのと同じような手軽さで、日本語入力を行うことができます。したがって、APは日本語入力の複雑な処理をFEP側にまかせて、本来の目的に専念することができます。ワープロ以外の、日本語入力主体としないAPには、この仮想端末入力型インターフェイスが適しています。
また、日本語ワープロなどで仮想端末入力インターフェイスに頼らず、独自のユーザーインターフェイスを持ちたい場合は、辞書インターフェイスを使用することができます。辞書インターフェイスはこの他にも、例えば、ノンインタラクティブにかな漢字変換を行うプログラムにも利用できます。
この仕様の適用対象は、表計算ソフト、データベース、ゲームなど、外部のMSX-JEを利用して日本語入力を行うアプリケーションソフトウェアです。これらのアプリケーションソフトウェアはこの仕様を満たしていれば、自分でかな漢字変換を行わなくても、MSX-JEを使用して日本語入力を行うことができます。
MSX-JEは、
- 日本語カートリッジ(ソニー)などの独立したカートリッジ
- HB-F1XV(ソニー)、FS-A1WSX(パナソニック)などのようにMSX本体に内蔵
- MSX-WriteII(アスキー)など、日本語ワープロがかな漢字変換だけを外部に提供
などの形式で持つことができます。ワープロソフトがこのようなインターフェイスを持つことにより、ワープロを購入したユーザーは他のアプリケーションソフトウェアでも、ワープロの日本語入力機能を利用して、かな漢字変換入力ができることになります。
このような利用方法を可能とするために、以上にあげたようなソフトウェアは、MSX-JEの仕様にそったインターフェイスを持たせることを推奨します。
日本語ワープロのようにワープロと辞書が1つのROMカートリッジに一体化されている場合、そのワープロと辞書とのインターフェイスには、このインターフェイスを遵守する必要はありません。この場合、このインターフェイスは外部につけられた他のアプリケーションとの間でのみ使用されることになります。
内部に辞書をもつ日本語ワープロなどは、このインターフェイスを用いて外部からその辞書をアクセスできることを推奨します。
MSX-JEは大きく分けて、以下の2レベルの機能をサポートします。
1.仮想端末入力インターフェイス
仮想端末上でかな漢字変換を行う。
2.辞書インターフェイス
アプリケーションが直接辞書をアクセスするためのインターフェイス。
これらはファンクション番号によって区別されます。
APはまず最初にMSX-JEが実装されていることを確認し、MSX-JEのエントリアドレスを調べなければなりません。これは、MSXの拡張BIOSコールで以下のように行います。
- APはまず【HOKVLD(FB20H)】のビット0を調べます。ここが0の場合、拡張BIOSは存在せず、したがってMSX-JEもありません。この場合、EXTBIOをコールすることはできません。
- 次に、RETURN情報用のワークエリア(64バイト)を確保します。
- 以下の設定を行い、【EXTBIO(FFCAH)】をコールします。
D | デバイス番号(16) |
| MSX-JEのデバイス番号は16(10進) |
E | ファンクション番号(0) |
B | RETURN情報用のワークエリアのスロットアドレス |
| 上記の2.で確保したワークエリアのRAMスロットアドレス |
HL | RETURN情報エリアの先頭アドレス |
RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。ディスクが接続されていないシステムでRAMのスロットアドレスを探す場合は、サンプルプログラムの「RAMSRCH.MAC」を参照して下さい。
ページ | ワークエリアのアドレス |
0 | F341H |
1 | F342H |
2 | F343H |
3 | F344H |
B | 次のRETURN情報エリアのスロットアドレス |
HL | 次のRETURN情報エリアの先頭アドレス |
したがって、APは以下のようにしてエントリアドレスを調べます。
リスト7.1 MSX-JE拡張BIOSエントリアドレスの獲得
hokvld equ 0fb20h ; Extended BIOS flag
exbio equ 0ffcah ; Extended BIOS hook
;
ld a, (hokbld)
rra
jr nc, no_mje
ld hl, mjetbl
call getslt ; Get slot address of MJETBL into [B]
ld de, 16*256+0
push hl
call extbio
pop de
or a
sbc hl, de
jr z, no_mje
:
:
:
EXTBIOから戻ったとき、MJETBLには以下のようなデータが返され、HLにはMSX-JEのエントリ分先に進められます。MSX-JEが存在しないときは、HLの内容は更新されません。この例はAとBの2つのMSX-JEが存在している場合です。
スロットアドレスの表現はMSX共通で以下の通りです。
拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。
ケーパビリティベクトルは以下のようなビットパターンです。
このビット列は、装備されている日本語処理機能のサブセットとスーパーセットを示すためのビット列です。
APはこのビット列をチェックし、利用可能な機能を確認した上でMSX-JEをコールして下さい。例えば、仮想端末インターフェイスのみを使用するAPはこのビット列と03HとのANDを取り、ビット0と1が0になっていることを確認します。
MSX-JE側では、MSXのイニシャライズの時点で、自分の拡張BIOSエントリを【EXTBIO( 0FFCAH)】にフックします。拡張BIOSでは、DEレジスタが1000Hの場合に上記の動作をし、0の場合にはブロードキャストの動作を行います。それ以外の場合は、表レジスタの内容を保存したままリターンします。ブロードキャストについては、「7章拡張BIOSコール」をご覧下さい。
MSX-JE側では固定番地にワークエリアを確保することが不可能なため、アプリケーションからコールされるごとに、自分のワークエリアの番地をレジスタにセットして渡してもらう必要があります。
MSX-JEをコールするときは以下のようにします。
A | ファンクション番号 |
BC | パラメータ |
DE | パラメータ |
HL | ワークエリアの先頭アドレス |
A | (もしあれば)リターン値 |
BC | (もしあれば)リターン値 |
DE | (もしあれば)リターン値 |
HL | (もしあれば)リターン値 |
ワークエリア、および間接参照されるパラメータ(たとえばDEがストリングへのポインタだった場合、そのストリング)はページ2か3に置き、APはこれらのページを必ずイネーブルしてからMSX-JEをコールします。これは、ワークエリアがMSX-JEと同じページの裏側のスロットに置く事を許すとスロット切替が必要になり効率が期待できないためです。
MSX-JEではリターン値およびスタックポインタ以外のレジスタの値は保証されません。未定義のファンクションをコールした場合、何の処理も行わずにリターンします。ただし、スタックポインタ以外のレジスタの値は保証されません。
MSX-JEをコールする場合、HLの設定は必ず必要になるため、APはイニシャライズ時に次のようなプログラムを作成し、ファンクションコールにはこのプログラムを使用すると便利です。
mjea@:
mje@: ld hl,wrkbeg ; ワークエリアアドレス
rst 30h
defb sltadr ; MSX-JEスロットアドレス
defw entadr ; MSX-JEエントリアドレス
ret
このプログラムはMSX-C言語から次のようにして呼び出せます。
1.HLにリターン値がセットされるファンクションの場合
int mje();
...
int bc, de, hl;
...
hl = mje(func, de, bc);
...
2.Aレジスタにリターン値がセットされるファンクションの場合
char mjea();
...
char a;
int bc, de;
...
a = mjea(func, de, bc);
...
以下ではMSX-JEの仮想端末入力インターフェイスの仕様を解説します。このインターフェイスの目的はAP側が日本語入力をサポートする場合の負担を軽くすることにあります。
かな漢字変換に関係するユーザーインターフェイスはMSX-JE側で受け持ちます。したがって、このインターフェイスを使用するとき、かな漢字変換入力時にはAPは単にスクリーンメッセージを出力するだけです。つまり、APは、BIOSの文字入力ルーチンを使用するのと同じような手軽さで、日本語入力ができるようになります(図7.51参照)。
日本語ワードプロセッサのように、かな漢字変換時にも自分自身で独自のユーザーインターフェイスを持ちたい場合や、画面上でなくプログラムでかな漢字変換を行いたい場合は、辞書インターフェイスを使用します。
仮想端末入力インターフェイスでのキー入力処理は、かな漢字変換中はMSX-JEが行い、変換中でない場合はAPが行います。それぞれのプログラムはキーバッファを1文字先読みし、自分の受け持ちでない文字が入力されると処理を終了し、相手に制御を渡します。基本的には、コントロールコードはAPが、文字キーはMSX-JEが受け持ちます。
MSX-JEは機能を拡張するため、ファンクションキーのF1〜F5を使用できます。ただし、制御の受け渡しはキーバッファのみを参照する方式になっているので、ファンクションキーを使うときは、あらかじめファンクションキーに特別なコードをセットしておかなければなりません。その場合、先頭1バイトに01H、2バイト目にキーの種別をセットします。01Hで始まる2バイトグラフィック文字と区別するため、以下のコードを使用します。なお、MSX-JEがファンクションキーを使わないのであれば、F1〜F5をこのように設定する必要はありません。
F1 01H、31H
F2 01H、32H
F3 01H、33H
F4 01H、34H
F5 01H、35H
また、ファンクションキーのF6〜F10はAPで使うことができます。その場合、先頭1バイトにはFFHをセットして下さい。APがファンクションキーを使用しない場合は、このようにセットする必要はありません。また、特殊な使用法として、よく使うキーストロークをAP側であらかじめF6からF10に設定しておくなども可能です。
仮想端末インターフェイスでは、1文字先読みが可能なため、APとMSX-JEがそれぞれ相互に制御を渡すキーの範囲が異なると、どちらでも処理されないキーが出来てしまう可能性があります。そして最悪の場合、そのようなキーが入力されたときに、処理が先に進まなくなってしまいます。
このような事態をさけるため、MSX-JEがバッファから取り出さないキーは必ずAPがバッファから取り出すよう、以下のようにキー割り当てを定めます。
■AP
1. キーバッファから必ず取り出すキー
コントロールコード(00H〜1FH、7FH、ただし、01Hで始まる2バイトグラフィック文字およびF1〜F5は除く)
FFHで始まる、F6〜F10に設定したキー
2. キーバッファから取り出さず、MSX-JEに制御を渡すキー
上記以外のキー
■MSX-JE
1. キーバッファから必ず取り出すキー
すべての文字キー(スペースを含む)
01Hで始まる2バイト
2. キーバッファから取り出さず、変換を終了させるキー
FFH、CTRL+C
したがって、いったん変換が開始されるとMSX-JEはコントロールコードをコマンドとして使用することが出来ます。しかし、この条件を守ると、コントロールコードで直接MSX-JEに制御を渡し、MSX-JEにコマンドを与えることはできません。
このような場合、Conflict detect (Function 10)をサポートすれば、APが自分で使用しない限り、コントロールコードをMSX-JEに直接入力できるようになります。
■AP
MSX-JEのコールによって、ファンクションキーF1からF5の文字列の設定は変更されてしまいます。したがって、内容を保存する必要があればAPはClear(Function 4)またはSetTTB(Function 5)をコールする前に、自分でファンクションキーの内容をバックアップし、変換が終了したらファンクションキーを元の状態に戻して下さい。
APはキーキューバッファの先頭に01Hが入っていたときは、MSX-JEに制御を渡してかまいません。ただし、このままだとCTRL+Aが処理できないので、これを避けるために、キーキューバッファに01Hのみがはいっていた場合、CTRL+Aとして取り扱うこともできます。
■MSX-JE
ファンクションキーの文字列の設定はClearとSetTTBで行います。以前の設定をバックアップする必要はありません。
MSX-JEは、変換開始時にキーバッファに01Hのみが入っていた場合は、01Hをキーバッファから取り除き、APに制御を戻します。
リスト7.2 APのプログラム例
/* APのメインプログラム */
main()
{
char work[2560];
char c, MSX-JE_status;
/* MSX-JEのイニシャライズ */
MSX-JE_Inquiry();
MSX-JE_Invoke();
/* かな漢字入力を始める */
MSX-JE_Clear();
for( ; ; ){
/* キーバッファの先頭文字を先読みする */
c = chsns();
/* APが処理すべきキーかどうかのチェック */
if (C==0x01 || 0x20 <= c && c != 0x7f && c != 0xff){
/* 文字キーかF1〜F5キーなら変換を開始する */
do {
MSX-JE_status = MSX-JE_Dispatch();
if( MSX-JE_status & 1 ) display(STB);
if( MSX-JE_status & 2 ) input(MSX-JE_GetResult());
} while( !(MSX-JE_status & 4) );
} else {
/* APで処理する文字を取り出す */
c=chget();
/* 漢字入力の終わり */
if( C == xxx ) break;
switch(c) { /* 必要なら確定済み文字列の編集 */
case ...:
....
}
}
}
/* MSX-JEを終了する */
MSX-JE_Release();
}
/* 下位ルーチン */
display(s)
char * s;
{
/* ポインタsの指しているSTB形式(後述)の表示データを
かな漢字変換用ウィンドウに表示する。 */
}
input(s)
char * s;
{
/* ポインタsの指している文字列をあたかもコンソールから
入力されたように処理する。 */
}
APと仮想端末入力インターフェイスとの間でキーのやり取りをするためには、キーのセンスをして仮想端末に制御を移すべき文字なのかを調べる必要があります。しかし、BIOSのCHSNS(009C/MAIN)では、キーバッファの状態を調べることはできても、その先頭の文字が何であるかを知ることはできません。そこで、以下の方法をとらなければなりません。
- CHSNSでキーバッファの内容を調べます。
- バッファが空でなければ、【GETPNT(0F3FAH,2)】の内容が示すアドレスにあるデータが、次にCHGETしたときに得られるキーコード。
STBはMSX-JEが画面表示を行うときに使用するデータ構造です。MSX-JEが日本語入力中に画面に出力する情報は、全てSTBの形式でAPに渡されます。APはSTBのフォーマットを解釈して、あらかじめMSX-JE用に確保していたスクリーンの領域(ウィンドウ)に文字列を出力します。
1.STBのフォーマット
表7.96 STBのフォーマット
データ | 意味 |
シフトJISコード、半角の英、数、仮名、記号文字 | カーソル位置に文字を表示し、カーソルを文字幅分だけ進めます。 |
NUL (0) | テキストの終わりです。 |
^E (5) | カーソル位置以降の文字を消去します。カーソル位置は変わりません。 |
^H (8) | カーソルを1文字後退し、カーソル位置以降の文字を消去します。 |
^L (12) | カーソルをウィンドウの先頭に移動し、カーソル位置以降の文字を消去します。 |
^R (18) | カーソル位置から次の1バイトで指定される長さだけ、ウィンドウの領域をリバースします。 |
^W (23) | 次の1バイトで指定されるウィンドウを開きます。 |
^X (24) | 次の1バイトをX座標としてカーソルを移動します。 |
^Y (25) | 次の1バイトをY座標としてカーソルを移動します。 |
^Z (26) | アトリビュート指定です。次の1バイトの上位4ビットが文字色、下位4ビットが背景色です。 |
上記以外で00〜15のコード | システム予約です。スキップして下さい。 |
上記以外で16〜31のコード | システム予約です。このコードと続く1バイトもスキップして下さい。 |
■文字の位置指定
文字の位置指定などは全て半角単位です。またX・Y座標の開始値は1です。
■カーソルの表示
STBを表示するとき、カーソル移動を可能にした仮想端末のためにカーソル位置にカーソルを表示しなければなりません。このカーソルは、文字の指定と区別するために1を開始位置とし、X座標の指定が0のときはカーソルを表示しないものとします。
■ウィンドウのクローズ
STBにはウィンドウのクローズファンクションはないので、ウィンドウのクローズはAPが管理しなければなりません。ウィンドウのクローズはSTBがウィンドウの消去(^L)のファンクションを返したときに可能です。
■ファンクションのサポート
Inquire Window Size (Function 9)をコールしないAPは、STB表示フォーマットの^Yと^Zをサポートする必要はありません。
■以前のウィンドウ
STBはこの文字列を表示する前に、画面がどのような状態であったかはいっさい関知しません。したがって、ウィンドウを開く前の状態にウィンドウの画面を戻したいときには、ウィンドウを開く前に、あらかじめ画面の内容をAPが保存しておかなければなりません。
■ウィンドウ内の情報
カーソル位置、文字のアトリビュート、ウィンドウなどは、次回の表示まで保存されます。例えば、入力テキストの最後尾にカーソルがあり、そこに1文字追加したい場合、MSX-JE側では、追加文字だけのSTBを返せばいいことになります。
■入力テキストの表示
MSX-JE側では、複数のウィンドウをサポートしないAPのため、入力テキストの表示は必ずウィンドウ#0を使用しなければなりません。
Dispatch (Function 6)
Inquire Window Size (Function 9)
MSX-JEはAPと独立したプログラムとして動作します。したがって、MSX-JEのステータスの中で、変換途中の文字列の状態をAPがGetしたりSetしたりできるように、TTBと呼ぶデータ構造を用意します。
TTBはAPがいったん変換したテキストの再変換を行うときに、読みデータを渡すために使用するデータ形式です。データは、GetTTB(Function 8)でMSX-JEからAPに渡され、SetTTB(Function 5)でMSX-JEにSetされます。
1.TTBのフォーマット
TTB::= TTC TTC ..., 0
TTC::= 1〜31 1〜31バイトの読みデータ
32〜127 1バイトの読みデータ
128〜255 継続読みデータ
TTBは「0」で終わるTTCの列で、TTC1つが変換結果の1charに対応します。1つのTTCは、
- 値が32〜127の1バイトの数
- 値が128〜255までの1バイト数のくりかえしで、最後に値が32〜127の1バイトで終わるもの
- 値が1〜31の1バイトの後に、1〜31バイトの任意のデータが続いたもの
です。
例えば、ローマ字データを読みデータとするときはASCII文字列を使用し、変換結果1文字の最後に相当するローマ字以外はビット7を立てます。変換結果の漢字と読み番号で読みが得られるシステムなら、読み番号を32〜127の数字に変換してTTCにします。
TTCの各データの意味は特に規定しません。したがって、アプリケーションはTTCの表しているものが、カタカタであるかローマ字であるかなどということは関知しません。TTCの意味的な解釈はMSX-JEだけが行います。
■AP
Set TTB (Function 5)とGet TTB (Function 8)を使用しないAPは、TTBをサポートする必要はありません。
■MSX-JE
MSX-JEがSet TTB、Get TTBファンクションをサポートしない場合は、TTBをサポートする必要はありません。
Set TTB (Function 5)
Get TTB (Function 8)
表 7.97 仮想端末インターフェイス一覧
ファンクション番号 | ファンクション名 | 機能 |
1 | Inquiry | ワークエリアサイズの獲得 |
2 | Invoke | MSX-JEの起動 |
3 | Release | MSX-JEの終了 |
4 | Clear | かな漢字変換バッファのクリア |
5 [option] | Set TTB | 再変換用データのTTBへの設定 |
6 | Dispatch | MSX-JEに制御を渡す |
7 | Get Result | 変換結果の獲得 |
8 [option] | Get TTB | テキストの読みデータの獲得 |
9 [option] | Inquire Window Size | ウィンドウ形式の設定 |
10 [option] | Conflict detect | 制御キーの衝突防止 |
[option]となっているファンクションは、APは使用しなくても良いが、使用することにより、より高度な処理が簡単にできるファンクションです。
また、ファンクション1〜3は仮想端末インターフェイスと辞書インターフェイスの両方で使用できます。
- Inquiry (Function 1)
| HL | MAX(MSX-JEが使用するワークエリアの大きさの上限) |
| DE | MIN(MSX-JEが使用するワークエリアの大きさの下限) |
| BC | MIN2(MSX-JEが学習機能を使用するのに必要最小なサイズ) |
| ■AP |
| APがMSX-JEのために準備できるワークエリアの大きさをnとすると、必要なワークエリアの大きさは以下のようになります。 |
| 戻り値の関係 | ワークエリアの大きさ |
| n | < | MIN | | | (APはMSX-JEを使用できない) |
| MIN | ≦ | n | < | MIN2 | MIN (APは学習機能を使用できない) |
| MIN | ≦ | n | < | MAX | n |
| MAX | ≦ | n | | | MAX |
| APは学習機能が使用できなくてもかまいません。また、常に2560バイトのワークが確保できるのであれば、このファンクションを呼ぶ必要はありません。 |
| |
| ■MSX-JE |
| このファンクションに限って、ワークエリアのアドレスはパラメータとしてMSX-JEに渡されません。したがって、MSX-JEはワークエリアを使用できません。 |
- Invoke (Function 2)
| A | 02H |
| HL | ワークエリアのアドレス |
| DE | ワークエリアの大きさ |
| ■AP |
| APは最低でも、Inquiry (Function 1)で返されたMIN以上のワークエリアが確保できなければなりません。DEレジスタにMIN以下の数を渡したときの結果は保証されません。 |
| |
| ■MSX-JE |
| MSX-JEは使用するワークエリアの大きさが一定ならば、このファンクションのパラメータは無視してかまいません。 |
- Release (Function 3)
| ■AP |
| APはシステムの再起動や学習辞書の更新が保証されなくてもよければ、このファンクションを呼び出さなくてもかまいません。 |
| |
| ■MSX-JE |
| MSX-JEはこのファンクションによって、システムの再起動などに問題がなければ、なにもしなくてもかまいません。 |
| Inquiry (Function 1) |
| Invoke (Function 2) |
- Clear (Function 4)
| かな漢字変換用のバッファをクリアします。このファンクションにより、かな漢字変換モジュールはいままでの入力テキストをクリアします。 |
- Set TTB (Function 5) [option]
| APからMSX-JEに再変換したいテキストと読みデータを渡し、MSX-JEの内部バッファにセットします。 |
| A | 05H |
| HL | ワークエリアのアドレス |
| DE | 再変換するテキストデータのアドレス |
| BC | TTBのアドレス |
| APからMSX-JEに再変換したいテキストと読みデータを渡し、MSX-JEの内部バッファにセットします。このファンクションによりMSX-JEは与えられたテキストを再変換します。 |
| DEレジスタにテキストそのもののアドレスをセットし、BCレジスタにはTTB (Transferrable Text Block)のアドレスをセットします。APは再変換をする必要がなければ、このファンクションを使用する必要はありません。MSX-JEがこのファンクションとGet TTB (Function 8)をサポートしない場合、A = 0FFHとしてリターンします。 |
| 5.4.5 TTB |
| Clear (Function 4) |
| Get TTB (Function 8) |
- Dispatch (Function 6) [option]
| APからMSX-JEにCPUの制御を渡します。MSX-JEはテキスト表示の必要がある場合とAPに制御を戻す場合がある場合に、Aレジスタにステータスを、HLレジスタにSTBのアドレスをセットしてリターンします。MSX-JEが直接表示することなく、表示するテキストはSTB (Screen image Text Block) の形でAPに渡され、APが表示することになります。 |
| ビット | 値 | 意味 |
| 0 | 1 | APがSTBの表示を行う。 |
| 1 | 1 | APが変換結果を得られる。 |
| 2 | 1 | MSX-JEの変換が終了した。 |
| |
| ステータス | 意味 |
| 000 | MSX-JEがキーを無視した場合とキー入力がなかった場合。 |
| 001 | 入力中もしくは変換中である場合。 |
| 01x | 部分確定をした場合。 |
| 10x | 変換が中断されて終了した場合。 |
| 11x | 全確定した場合。 |
| |
| ■ステータスの解釈とその順番 |
| ステータスは3ビットの情報からなりますが、APはこれをそれぞれ別々に解釈します。例えば、ビット0〜2が同時に立った場合、APはまずSTBの表示を行い、次にGet Requestをコールし、Dispatchのコールを中止します。 |
| |
| ■確定時のSTB |
| 部分確定したときのSTBは、未確定部分を再表示する必要があります。この場合、変換結果を得る前と後とで学習機能などのため、表示内容が変わる可能性があります。そのため、AP側では、部分確定の変換結果を得た直後、再度Dispatchを呼び、表示内容に変更があったSTBを受け取らなければなりません。また、MSX-JE側は、部分確定の変換結果を返した直後にDispatchを呼び出された場合、キー処理を行わず、000または001のステータスを直ちに返します。 |
| テールタイプ(Inquire Window Size参照)のウィンドウの場合、入力処理を行うと、ウィンドウ自体が移動し、以前の表示内容は保証されません。したがって、確定直後のSTBは表示テキストの全内容を含んでいます。 |
| |
- Get Result (Function 7)
| 変換結果を返します。変換結果は00Hで終わるシフトJIS文字列です。APは得られたテキストをあたかもコンソールから入力されたのと同じように処理します。 |
- Get TTB (Function 8) [option]
| Get Resultで得られたテキストの読みデータを獲得します。 |
| Get Resultで得られたテキストの読みデータを獲得します。読みデータはTTB形式で与えられます。APは再変換の必要がなければ、このファンクションをコールする必要はありません。MSX-JEはこのファンクションとSet TTB (Function 5)をサポートしない場合、HLレジスタに、1バイトのNULL(0)へのポインタをセットする。 |
| Set TTB (Function 5) |
| 5.4.5 TTB |
- Inquire Window Size (Function 9) [option]
| A | 09H |
| HL | ワークエリアのアドレス |
| E | テール形式の最大長 |
| B | ウィンドウ形式の最大高さ |
| C | ウィンドウ形式の最大長 |
| MSX-JE用変換ウィンドウをデフォルト(1行×全角14文字、インデペンデント形式)意外に設定します。まず、APが用意できるウィンドウの大きさをパラメータとしてコールします。それに対して、MSX-JEは自分が必要とするウィンドウの大きさをセットしてリターンします。デフォルトのウィンドウサイズで使用するときは、APはこのファンクションを呼ぶ必要はありません。 |
| ■ウィンドウ指定データ | | |
| ウィンドウ指定データ | ::= | 任意個のウィンドウ指定子, 0 |
| ウィンドウ指定子 | ::= | ウィンドウタイプ(1バイト) |
| | | ウィンドウ長さ(1バイト) |
| | | ウィンドウ高さ(1バイト) |
| ウィンドウタイプ | ::= | 1(インデペンデント)、2(テール) |
| | | |
| 文字数は全て半角相当の文字数です。ウィンドウタイプは2種類あります。 |
| ウィンドウタイプ | 機能 |
| インデペンデント | テキストと独立して折り返しのないスクリーンイメージのウィンドウです。 |
| テール | APのテキストバッファの後に表示可能な(したがって折り返しやスクロールを許す)タイプのウィンドウです。 |
| ■AP |
| APこのファンクションをコールしない場合、デフォルトのウィンドウとしてインデペンデントタイプの全角14文字表示のウィンドウを開きます。 |
| ■MSX-JE |
| MSX-JEはこのファンクションをコールされなくても(デフォルトのウィンドウのままで)動作しなければなりません。MSX-JEはデフォルトのウィンドウ以外をサポートしない場合、このファンクションをコールされたら以下のデータの先頭アドレスをHLレジスタに入れてリターンして下さい(デフォルトのウィンドウを再度指定)。 |
| オフセット | データ |
| 0 | 1 |
| 1 | 28 |
| 2 | 1 |
| 3 | 0 |
- Conflict detect (Function 10) [option]
| A | 00H | Not detected |
| | FFH | Detected |
| APがキー入力キューから取りださすにMSX-JEに制御を移すキーとMSX-JEからAPに制御を移すキーが衝突することを防ぎます。 |
| APは、デフォルトのキー割り当て(5.4.1参照)で、APがキューから取り出さなくてはいけないキーをキューから取り出さずにMSX-JEに制御を渡したい場合、このファンクションをコールします。 |
| MSX-JEは、もしキューの先頭の文字がDispatchに制御が渡ったときにキューから取りだされない文字だったら、このファンクションコールでキューから取り除き、A=0FFHとしてリターンします。そうでなければ、A=0としてリターンします。 |
| ■MSX-JE |
| デフォルトのキー割り当てを使用するMSX-JEは、このファンクションでは常にキューから1文字取りだし、FFHを返します。 |
ここでは、MSX-JEの辞書アクセスインターフェイスについて解説します。辞書インターフェイスは日本語ワープロなど、高度なAPが使用するのに適したファンクションです。
ゲームなど日本語入力を主体としないAPには、仮想端末入力インターフェイスが適しています。
ユーザーがAPごとに異なるユーザーインターフェイスを強いられ、困惑することを避けるためにも、特に必要のない限り、仮想端末インターフェイスを使用することを推奨します。
辞書インターフェイスでは、テキストは常に以下のようなフォーマットで扱い、BCレジスタまたはDEレジスタで示されるバッファに置きます。
全角文字はシフトJISコードを用い、文字数は半角(バイト数)です。
表 7.98 辞書インターフェイス一覧
ファンクション番号 | 関数名 | 機能 |
40H | han_zen | 半角文字列を全角文字列に変換 |
41H | zen_han | 全角文字列を半角文字列に変換 |
42H | han_kata | 半角文字列を全角カタカナに変換(ローマ字変換) |
43H | han_hira | 半角文字列を全角ひらがなに変換(ローマ字変換) |
44H | kata_hira | 全角カタカナを全角ひらがな文字列に変換 |
45H | hira_kata | 全角ひらがなを全角カタカナ文字列に変換 |
46H | open_dic | 辞書ファイルのオープン |
47H | henkan | 連文節変換の開始 |
48H | ji_koho | 次候補の獲得 |
49H | zen_koho | 前候補の獲得 |
4AH | ji_block | 次候補ブロックの獲得 |
4BH | zen_block | 全候補ブロックの獲得 |
4CH | kakutei1 | 候補全体の確定 |
4DH | kakutei2 | 先頭文節の確定 |
4EH | close_dic | 辞書ファイルのクローズ |
4FH | touroku | 単語登録 |
50H | sakujo | 単語削除 |
- han_zen (Function 40H)
| A | 40H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(半角文字列)のアドレス |
| BC | デスティネーション(全角文字列)のアドレス |
| A | 00H | 成功 |
| | 0以外 | 失敗、変換できなかった文字のソース上の位置 |
| 半角文字列を全角文字列に変換します。半角コード00H〜1FH、7FH〜9FH、E0H〜FFHはエラーになります。戻り値として、成功すれば0、失敗すれば失敗した文字のソースバッファ上での位置が返ります。失敗の場合も含めてデスティネーションには変換された文字数と文字列をセットします。 |
| ただし、半角記号、濁音、半濁音記号の取り扱いについては、処理系によって変換結果が異なることがあります。 |
| 以下のプログラムは半角文字列「ABC」を全角文字「ABC」に変換する。 |
| |
| ■プログラム |
| #define han_zen(s, d) mjea((char)0x40, s, d) |
| char s[65], d[65]; |
| han_zen(s, d); |
| |
- zen_han (Function 41H)
| A | 41H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(全角文字列)のアドレス |
| BC | デスティネーション(半角文字列)のアドレス |
| A | 00H | 成功 |
| | 0以外 | 失敗、変換できなかった文字のソース上の位置 |
| 全角文字列を半角文字列に変換します。半角文字と対応する半角文字のない全角文字はエラーになります。戻り値として、成功すれば0、失敗すれば失敗した文字のソースバッファ上での位置が返ります。失敗の場合も含めてデスティネーションには変換された文字数と文字列をセットします。 |
| ただし、全角記号、ひらがな、カタカナの濁音、半濁音記号の取り扱いについては処理系によって変換結果が異なることがあります。 |
| 以下のプログラムは全角文字「ABC」を半角文字列「ABC」に変換する。 |
| |
| ■プログラム |
| #define zen_han(s, d) mjea((char)0x41, s, d) |
| char s[65], d[65]; |
| zen_han(s, d); |
- han_kata (Function 42H)
| ローマ字、カタカナ、またはその混在の半角文字列を全角カタカナ文字列に変換します。 |
| A | 42H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(半角文字列)のアドレス |
| BC | デスティネーション(カタカナ文字列)のアドレス |
| A | 00H | 成功 |
| | 0以外 | 失敗、変換できなかった文字のバッファ上での位置 |
| ローマ字、カタカナ、またはその混在の半角文字列を全角カタカナ文字列に変換します。戻り値として、成功すれば0、失敗すれば失敗した文字のソースバッファ上での位置が返ります。失敗の場合も含めて、デスティネーションには変換された文字数と文字列をセットします。 |
| 以下のプログラムは半角文字列「katakana」を全角カタカナ文字列「カタカナ」に変換する。 |
| |
| ■プログラム |
| #define han_kata(s, d) mjea((char)0x42, s, d) |
| char s[65], d[65]; |
| han_kata(s, d); |
- han_hira (Function 43H)
| ローマ字、カタカナ、またはその混在の半角文字列を全角ひらがな文字列に変換します。 |
| A | 43H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(半角文字列)のアドレス |
| BC | デスティネーション(ひらがな文字列)のアドレス |
| A | 00H | 成功 |
| | 0以外 | 失敗、変換できなかった文字のバッファ上での位置 |
| ローマ字、カタカナ、またはその混在の半角文字列を全角ひらがな文字列に変換します。戻り値として、成功すれば0、失敗すれば失敗した文字のソースバッファ上での位置が返ります。失敗の場合も含めて、デスティネーションには変換された文字数と文字列をセットします。 |
| 以下のプログラムは半角文字列「hiragana」を全角ひらがな文字列「ひらがな」に変換する。 |
| |
| ■プログラム |
| #define han_hira(s, d) mjea((char)0x43, s, d) |
| char s[65], d[65]; |
| han_hira(s, d); |
- kata_hira (Function 44H)
| 全角カタカナ文字列を全角ひらがな文字列に変換します。 |
| A | 44H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(カタカナ文字列)のアドレス |
| BC | デスティネーション(ひらがな文字列)のアドレス |
| 全角カタカナ文字列を全角ひらがな文字列に変換します。全角カタカナ文字以外の全角文字はそのままデスティネーションにコピーします。半角文字が含まれていた場合の変換結果は保証しません。 |
| ただし、「ヴ」、「ヵ」、「ヶ」については処理系によって変換結果が異なることがあります。 |
| 以下のプログラムは全角カタカナ文字列「カタヒラ」を全角ひらがな文字列「かたひら」に変換する。 |
| |
| ■プログラム |
| #define kata_hira(s, d) mjea((char)0x44, s, d) |
| char s[65], d[65]; |
| kata_hira(s, d); |
- hira_kata (Function 45H)
| 全角ひらがな文字列を全角カタカナ文字列に変換します。 |
| A | 45H |
| HL | ワークエリアのアドレス |
| DE | ソースバッファ(ひらがな文字列)のアドレス |
| BC | デスティネーション(カタカナ文字列)のアドレス |
| 全角ひらがな文字列を全角カタカナ文字列に変換します。全角ひらがな文字以外の全角文字はそのままデスティネーションにコピーします。半角文字が含まれていた場合の変換結果は保証しません。 |
| 以下のプログラムは全角ひらがな文字列「ひらかた」を全角カタカナ文字列「ヒラカタ」に変換する。 |
| |
| ■プログラム |
| #define hira_kata(s, d) mjea((char)0x45, s, d) |
| char s[65], d[65]; |
| hira_kata(s, d); |
- open_dic (Function 46H)
| A | 46H |
| HL | ワークエリアのアドレス |
| DE | 0 |
| この機能は将来の拡張のために用意されています。アプリケーションはこの機能を呼ぶ必要はありません。 |
- henkan (Function 47H)
| 全角カタカナ文字列、全角ひらがな文字列を漢字かな混じり文字列に変換します。 |
| A | 47H |
| HL | ワークエリアのアドレス |
| DE | 読みデータのアドレス |
| 全角カタカナ文字列、全角ひらがな文字列を漢字かな混じり文字列に変換します。戻り値として、先頭文節の候補数が返ります。変換結果は、ji_koho(Function 48H)などで取り出すことができます。 |
| 以下のプログラムは文字列tに入っている読みデータを漢字かな混じり文字列に変換します。 |
| |
| ■プログラム |
| #define henkan(s, d) mjea((char)0x47, s) |
| char t[65]; TINY n; |
| n = henkan(t); |
| nに先頭文節「ヤマノ」の候補数をセットされます。変換結果はji_kohoなどで得ることができます。 |
- ji_koho (Function 48H)
| A | 48H |
| HL | ワークエリアのアドレス |
| DE | 候補バッファ |
| BC | 後続文節バッファ |
| 先頭文節の候補群の中の次の候補を1つ獲得します。この呼び出しの前に、henkan (Function 47H)で読みデータをセットしなければなりません。 |
| 以下のプログラムは「ヤマノウエノイエ」を変換して、「山の」をcandに、「上の家」をrestにセットします。 |
| |
| ■プログラム |
| #define ji_koho(c, r) mjea((char)0x48, c, r) |
| char text[65]; cand[65]; rest[65]; |
| henkan(text); |
| ji_koho(cand, rest); |
- zen_koho (Function 49H)
| A | 49H |
| HL | ワークエリアのアドレス |
| DE | 候補バッファ |
| BC | 後続文節バッファ |
| 先頭文節の候補群の中の1つ前の候補を獲得します。前もって、henkan (Function 47H)で読みデータをセットしなければなりません。 |
| 以下のプログラムは「キカイヲミテ」を変換して、「機械を・・・」、「機会を・・・」に変換したあと、第一候補の「機械を・・・」を再度獲得します。 |
| |
| ■プログラム |
| #define zen_koho(c, r) mjea((char)0x49, c, r) |
| char text[65]; cand[65]; rest[65]; |
| henkan(text); |
| ji_koho(cand, rest); |
| ji_koho(cand, rest); |
| zen_koho(cand, rest); |
| rest | 4 | 見て | (全角文字列) |
| |
| 2回目のji_kohoの結果 |
| rest | 4 | 見て | (全角文字列) |
| |
| zen_kohoの結果 |
- ji_block (Function 4AH)
| 現在の候補群の次に優先度の低い候補群を作成し、候補数を返します。 |
| 現在の候補群の次に優先度の低い候補群を作成し、候補数を返します。前もって、henkan (Function 47H)で読みデータをセットしなければなりません。 |
| いったん読みデータをセットすれば、いつ、何回、ji_blockを行ってもかまいません。結果はji_kohoなどで獲得します。 |
| 以下のプログラムは「キョウハイシャニイッタ」を変換します。最初のji_kohoの結果は「今日は」と「医者にいった」になります。次に、ji_blockで次の候補群を作成すると、ji_kohoの結果、「今日」と「歯医者にいった」が獲得されます。 |
| |
| ■プログラム |
| #define ji_block() mjea((char)0x4A) |
| char text[65]; cand[65]; rest[65]; |
| henkan(text); |
| ji_koho(cand, rest); |
| ji_block(); |
| ji_koho(cand, rest); |
| text | 22 | キョウハイシャニイッタ | (全角文字列) |
| |
| cand | 12 | 医者にいった | (全角文字列) |
| |
| 2回目のji_koho |
- zen_block (Function 4BH)
| 現在の候補群より優先度の高い候補群を作成し候補数を返します。 |
| 現在の候補群より優先度の高い候補群を作成し候補数を返します。前もって、henkan (Function 47H)で読みデータをセットしなければなりません。 |
| zen_blockの使用方法は、ji_blockと同じです。いったん読みデータをセットすれば、いつ、何回、zen_blockを実行してもかまいません。結果は、ji_kohoなどで獲得します。 |
| 以下のプログラムはいったんji_blockをして、再度zen_blockを行ってそれぞれ変換結果を得ます。 |
| |
| ■プログラム |
| #define zen_block() mjea((char)0x4b) |
| char text[65]; cand[65]; rest[65]; |
| henkan(text); |
| ji_koho(cand, rest); |
| ji_block(); |
| ji_koho(cand, rest); |
| zen_block(); |
| ji_koho(cand, rest); |
| text | 22 | キョウハイシャニイッタ | (全角文字列) |
| |
| rest | 12 | 医者にいった | (全角文字列) |
| |
| 2回目のji_kohoの結果 |
| rest | 14 | 歯医者にいった | (全角文字列) |
| |
| 3回目のji_kohoの結果 |
- kakutei1 (Function 4CH)
| A | 4BH |
| HL | ワークエリアのアドレス |
| E | 候補ブロック内通し番号 |
| BC | 変換結果格納バッファアドレス |
| 先頭文節として、Eレジスタで指定された候補を採用して、文全体を変換し、結果を確定されたバッファに格納します。 |
| 前もってhenkan(Function 47H)でデータをセットしなければなりません。ji_koho(Function 48H)などは必ずしも必要ありません。 |
| 以下のプログラムは、sに入っている読みデータを変換してtに格納します。先頭文節の候補として3番目の候補を使います。 |
| |
| ■プログラム |
| #define kakutei1(c, s) mjea((char)0x4c, c, s) |
| char s[65], t[65]; |
| henkan(s); |
| kakutei1(3, t); |
| |
- kakutei2 (Function 4DH)
| A | 4BH |
| HL | ワークエリアのアドレス |
| E | 候補ブロック内通し番号 |
| BC | 変換結果格納バッファアドレス |
| 先頭文節として、Eレジスタで指定された候補を採用して、先頭文節を変換し、結果を確定されたバッファに格納します。読みデータのなかで、先頭文節として変換された部分の長さ(半角相当)をAレジスタに返します。 |
| 前もってhenkan(Function 47H)で読みデータをセットて置くことが必要です。ji_koho(Function 48H)などは必ずしも必要ではありません。 |
| 以下のプログラムはsに入っている読みデータの最初の文節を変換してtに格納します。先頭文節の候補として最初の候補を使います。次に、この関数の戻り値を用いて後続文節の読みデータの先頭を求め、後続文節を新たに変換します。 |
| |
| ■プログラム |
| #define kakutei2(c, s) mjea((char)0x4d, c, s) |
| char s[65], t[65], *u; |
| henkan(s); |
| n = kakutei2(1, t); |
| u = s + n; |
| *u = * s - n; |
| henkan(u); |
| |
- close_dic (Function 4EH)
| この関数はVJEとの互換のためにあり、内部では何もしません。 |
- touroku (Function 4FH)
| 読みデータ、単語データ、品詞を与えて、指定単語を辞書に登録します。 |
| A | 4FH |
| HL | ワークエリアのアドレス |
| DE | 読みバッファのアドレス |
| BC | 単語登録バッファのアドレス |
| A | 00H | 正常終了(登録された) |
| | 01H | 空き領域が無い |
| | 02H | 同音語数オーバーフロー |
| | 04H | 読みデータが不適切 |
| | 08H | 単語データが不適切 |
| | 10H | 品詞情報が不適切 |
| | FFH | サポートされていない |
| 読みデータ、単語データ、品詞を与えて、指定単語を辞書に登録します。読みバッファ・登録単語バッファ共に、以下のように先頭に文字数を持つ文字列の形式です。品詞は、登録単語バッファの直後の1バイトに格納して引き渡します。 |
| | | 最大64バイト |
| 読み | 文字数 | 読みデータ(全角カタカナコード) |
| | 1バイト | ←(文字数は、バイト単位で表記) |
| | | 最大64バイト |
| 単語 | 文字数 | 単語データ(全角文字コード) | 品詞 |
| | 1バイト | ←(文字数は、バイト単位で表記) | 1バイト |
| 2バイト以上64バイト以下の全角カタカナコードです。ただし「ヮ」、「ヰ」、「ヱ」、「ヴ」、「ヵ」、「ヶ」は、処理系によって登録・削除できない可能性があります。 |
| |
| コード | 意味 |
| 1 | 品詞 |
| 2 | 名(姓) |
| 3 | 名(名) |
| 4 | 名 |
| 5 | サ変動詞(名詞+する) |
| |
| 以下のプログラムは読みが「ミツオ」で品詞が人名(名)である単語「光雄」を登録します。 |
| |
| ■プログラム |
| #define touroku(y, t) mjea((char)0x4F, y, t) |
| char yomi[65], tan[65]; |
| touroku(yomi, tan); |
| |
| | | ← 6バイト → |
| yomi | 6 | ミツオ(全角文字列) |
| |
| n = 0 |
| 読みが「ミツオ」で品詞が人名(名)である「光雄」が登録されます。 |
- sakujo (Function 50H)
| 読みデータ、単語データ、品詞を与えて、指定単語を辞書から削除します。 |
| A | 50H |
| HL | ワークエリアのアドレス |
| DE | 読みバッファのアドレス |
| BC | 削除単語バッファのアドレス |
| A | 00H | 正常終了(削除された) |
| | 01H | 削除対象の単語が見つからない |
| | 02H | (未使用) |
| | 04H | 読みデータが不適切 |
| | 08H | 単語データが不適切 |
| | 10H | 品詞情報が不適切 |
| | FFH | サポートされていない |
| 読みデータ、単語データ、品詞を与えて、指定単語を辞書から削除します。読みバッファ・登録単語バッファ共に、以下のように先頭に文字数を持つ文字列の形式です。品詞は、登録単語バッファの直後の1バイトに格納して引き渡します。 |
| | | 最大64バイト |
| 読み | 文字数 | 読みデータ(全角カタカナコード) |
| | 1バイト | ←(文字数は、バイト単位で表記) |
| | | 最大64バイト |
| 単語 | 文字数 | 単語データ(全角文字コード) | 品詞 |
| | 1バイト | ←(文字数は、バイト単位で表記) | 1バイト |
| 2バイト以上64バイト以下の全角カタカナコードです。ただし「ヮ」、「ヰ」、「ヱ」、「ヴ」、「ヵ」、「ヶ」は、処理系によって登録・削除できない可能性があります。 |
| |
| コード | 意味 |
| 1 | 品詞 |
| 2 | 名(姓) |
| 3 | 名(名) |
| 4 | 名 |
| 5 | サ変動詞(名詞+する) |
| |
| 以下のプログラムは読みが「ミツオ」で品詞が人名(名)である単語「光雄」を削除します。 |
| |
| ■プログラム |
| #define sakujo(y, t) mjea((char)0x50, y, t) |
| char yomi[65], tan[65]; |
| sakujo(yomi, tan); |
| |
| | | ← 6バイト → |
| yomi | 6 | ミツオ(全角文字列) |
| |
| n = 0 |
| 読みが「ミツオ」で品詞が人名(名)である「光雄」が削除されます。 |
ここでは、アスキーが開発したVJE-80(日本語MSX-Writeに搭載)、VJE-80A(日本語MSX-Write2に搭載)を使用する上で、特に注意しなければならないことを解説します。VJE-80およびVJE-80Aの仕様については、各仕様書をご覧下さい。
1.実装の確認
MSX-JEを使用するAPは、必要とするインターフェイスを持つMSX-JEデバイスがMSXに実装されているかを確認しなければなりません。
もし必要とするデバイスが実装されていない場合は、日本語入力ができないことをユーザーに知らせる処理を終了するか、もしくは他の方法で日本語処理をしなければなりません。例えば、単漢字変換機能をAP側で持つなどが考えられます。
MSX-JEのアクセス方法は、「5.3.1 エントリアドレスの獲得」をご参照下さい。
エントリアドレスの獲得ファンクションによる、HLレジスタの値およびケーパビリティベクトルの内容から自分が使用するMSX-JEの有無、仕様などを判断してください。
具体的には次のようにします。
- HLレジスタの内容からテーブルが作成されたことを確認します。指定デバイスが実装されていればHLレジスタの内容が更新されています。
- ケーパビリティベクトルの内容から仕様を判断します。1.、2.いずれの場合も使用不可ならばエラー処理して下さい。
- MSX-JEのケーパビリティベクトルは図7.50のようになっています。
各ビットから自分が使用できるものかを判断して下さい。
仮想端末インターフェイスのみを使用するときは、以下のようにします。
ld a, ケーパビリティベクトル
and 03h
jnz エラー処理エントリ
辞書インターフェイスのみを使用する時は、以下のようにします。
ld a, ケーパビリティベクトル
and 05h
jnz エラー処理エントリ
辞書、仮想端末入力インターフェイスの両者を使用するときは、以下のようにします。
ld a, ケーパビリティベクトル
and 07h
jnz エラー処理エントリ
- VJE-80のケーパビリティベクトルはF8Hですが、他のFEPがそうなっているとは限りません。商用のAPはケーパビリティベクトルとF8Hとのコンペアをとるなどの方法で、MSX-JEの有無や仕様を判断してはいけません。
- MSX-JE仕様では単語・登録削除機能は必須ではないので、AP側は登録削除機能が無い場合も考慮しなければなりません。
2.2つのMSX-JEが実装されていた場合
一部のMSX2、MSX2+にはMSX-JEが内蔵されており、これは切り離すことはできません。また、2つのバージョンの異なるMSX-JEが実装されることが考えられます。
MSX-JEを使用するアプリケーションは拡張BIOSコールにより作成されたデバイス情報テーブルから、これらの情報を知ることができるので、実装されている全てのMSX-JEのケーパビリティベクトルをチェックしてMSX-JEを使用して下さい。
3.MSX-JEのファンクションコール
辞書インターフェイス、仮想端末インターフェイスの区別なく、CPUの各レジスタに値を設定したうえで、先に獲得したMSX-JEのスロットアドレス、エントリアドレスをインタースロットコールします。
以下に、仮想端末インターフェイスを使うときの注意を説明します。
1.ウィンドウサイズ
仮想端末インターフェイスをつい買う場合には、inquire window sizeをコールしてウィンドウサイズを明示的にすることを推奨します。この関数をコールしない場合、MSX-JEは常にデフォルトのウィンドウを開きますが、ウィンドウサイズはできるだけ大きい方が使い勝手が良くなることが多いためです。
2.STBの表示
MSXで漢字を表示するときはビットマップ表示になるので、STBの表示方法次第で使用感が大きく異なります。以前表示されていたSTBと同じ部分はなるべく表示しないなどの工夫をして、表示速度を上げる努力をして下さい。
3.仮想端末のキーアサイン
仮想端末インターフェイスのキーアサインはMSX-JE仕様で規定されていないので、FEP間で異なります。
表7.99 VJE-80Aのキーアサイン
キー | 動作 |
SPACE | 文節変換および変換中の次候補(次の同音異義語)の表示。 |
SHIFT + SPACE | 前候補(同一ブロック内のみ有効、変換中のみ機能する。変換中以外は空白1文字)。 |
F1 | ローマ字入力モードと英数字入力モードの切り替え。 |
F2 | ひらがな変換(対象文節をひらがなに変換する)。 |
F3 | カタカナ変換(対象文節をカタカナに変換する)。 |
F4 | 半角変換(英数字とカタカナのみ、ひらがな・漢字も半角カタカナに変換される。文節単位に変換することはできない。半角変換では、カーソル位置までが対象となる)。 |
F5 | コード変換(入力されたJISコードに相当する単漢字に変換する)。 |
CTRL + F5 | 全文確定。 |
↓ | 文節変換/次の同音異義語のブロックの先頭を表示。 |
↑ | 文節変換/前の同音異義語のブロックの先頭を表示。 |
← | カーソル左移動。 |
→ | カーソル右移動。 |
任意の1文字 | 全文確定(確定キーを押さなくても、次の文字を入力すると、それ以前に変換された内容が確定する)。 |
SHIFT+← | カーソルを入力行頭へ移動する。 |
SHIFT+→ | カーソルを入力行末へ移動する。 |
ESC | 処理の取り消し(変換後→変換前→取消)。 |
RETURN | 文節単位の確定。 |
BS | カーソル左の1文字を消す。(変換中に押した場合は全確定し、最後の1文字が消去される)。 |
DEL | カーソル上の1文字を消す。 |
MSX-JEの仕様を遵守している限り、互換性は保証します。
ただし、VJE-80Aのサポートする関数はVJE-80よりも増えています。また、ワークエリアの大きさも異なります。
このため、VJE-80Aで動作したAPが必ずVJE-80で動作するとは限りません。特にVJE-80Aだけがサポートする関数を使った場合は、MSX-JE間での互換性もとれなくなりますのでご注意下さい。
なお、SRAM上の辞書および学習情報は、クローズしないで電源OFFまたはリセットされると壊れます。必ず、releaseによってメモリを解放して、辞書をクローズして下さい。
VJE-80およびVJE-80Aを使用する場合に絶対行ってはならないことを記しておきます。この内容は通常起こらないはずですが、デバッグ中などに原因不明の症状が起こったとき、調べてみて下さい。
- VJE-80およびVJE-80Aを含むスロットのページ1の任意アドレスにデータを書き込むことは禁止します。これは、VJE-80およびVJE-80Aがバンク構造で動いており、そのバンクセレクタがこの領域にマッピングされているためです。
- VJE-80Aではページ2の後半(A000H〜B000H)にワークエリアおよびユーザー辞書、学習情報などを保存しているSRAMがマッピングされます。したがって、この領域に対して書き込みを行ったときの動作保証はできません。