MSX Datapack wiki化計画

5章 MSX-JE

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
← 4.5 Y8950(MSX-AUDIO) 6章 24トッド漢字プリンタ?

 5.1 概要

 MSX-JE仕様とは、MSX日本語入力フロントエンドプロセッサのインターフェイスを規定するものです。これは、MSX上のアプリケーションソフトウェア(以下、AP)と日本語入力処理を分離し、容易に日本語入力を行えるようにするためのインターフェイスです。
 MSX-JEの仕様に沿って作成することにより、図7.46のようにAPといろいろな種類のフロントエンドプロセッサ(以下、FEP)を自由に組み合わせることができます。そして、複数のAPで同一のFEPを共有したり、APを変更しないで、FEPのみをより高機能なものに発展させたりすることが可能になります。


図7.46 MSX-JEの概念図

MSX-JEは大きく分けて、

  1. 仮想端末入力インターフェイス
  2. 辞書インターフェイス

の2つから構成されています。(図7.47参照)

 仮想端末入力インターフェイスを使用するときは、かな漢字変換入力時にはAPは単にスクリーンへのメッセージ出力を行うだけです。つまり、APは、BIOSの文字入力を使用するのと同じような手軽さで、日本語入力を行うことができます。したがって、APは日本語入力の複雑な処理をFEP側にまかせて、本来の目的に専念することができます。ワープロ以外の、日本語入力主体としないAPには、この仮想端末入力型インターフェイスが適しています。
 また、日本語ワープロなどで仮想端末入力インターフェイスに頼らず、独自のユーザーインターフェイスを持ちたい場合は、辞書インターフェイスを使用することができます。辞書インターフェイスはこの他にも、例えば、ノンインタラクティブにかな漢字変換を行うプログラムにも利用できます。


図7.47 MSX-JEの構成

 5.2 MSX-JEの仕様規定

5.2.1 適用範囲

 この仕様の適用対象は、表計算ソフト、データベース、ゲームなど、外部のMSX-JEを利用して日本語入力を行うアプリケーションソフトウェアです。これらのアプリケーションソフトウェアはこの仕様を満たしていれば、自分でかな漢字変換を行わなくても、MSX-JEを使用して日本語入力を行うことができます。
 MSX-JEは、

  1. 日本語カートリッジ(ソニー)などの独立したカートリッジ
  2. HB-F1XV(ソニー)、FS-A1WSX(パナソニック)などのようにMSX本体に内蔵
  3. MSX-WriteII(アスキー)など、日本語ワープロがかな漢字変換だけを外部に提供

などの形式で持つことができます。ワープロソフトがこのようなインターフェイスを持つことにより、ワープロを購入したユーザーは他のアプリケーションソフトウェアでも、ワープロの日本語入力機能を利用して、かな漢字変換入力ができることになります。
 このような利用方法を可能とするために、以上にあげたようなソフトウェアは、MSX-JEの仕様にそったインターフェイスを持たせることを推奨します。

5.2.2 日本語ワープロの場合

 日本語ワープロのようにワープロと辞書が1つのROMカートリッジに一体化されている場合、そのワープロと辞書とのインターフェイスには、このインターフェイスを遵守する必要はありません。この場合、このインターフェイスは外部につけられた他のアプリケーションとの間でのみ使用されることになります。
 内部に辞書をもつ日本語ワープロなどは、このインターフェイスを用いて外部からその辞書をアクセスできることを推奨します。

 5.3 ファンクションコールの方法

 MSX-JEは大きく分けて、以下の2レベルの機能をサポートします。

1.仮想端末入力インターフェイス
 仮想端末上でかな漢字変換を行う。

2.辞書インターフェイス
 アプリケーションが直接辞書をアクセスするためのインターフェイス。
 
 これらはファンクション番号によって区別されます。

5.3.1 エントリアドレスの獲得

 APはまず最初にMSX-JEが実装されていることを確認し、MSX-JEのエントリアドレスを調べなければなりません。これは、MSXの拡張BIOSコールで以下のように行います。

  1. APはまず【HOKVLD(FB20H)】のビット0を調べます。ここが0の場合、拡張BIOSは存在せず、したがってMSX-JEもありません。この場合、EXTBIOをコールすることはできません。
  2. 次に、RETURN情報用のワークエリア(64バイト)を確保します。
  3. 以下の設定を行い、【EXTBIO(FFCAH)】をコールします。
コール手順
D デバイス番号(16)
MSX-JEのデバイス番号は16(10進)
E ファンクション番号(0)
B RETURN情報用のワークエリアのスロットアドレス
上記の2.で確保したワークエリアのRAMスロットアドレス
HLRETURN情報エリアの先頭アドレス

 RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。ディスクが接続されていないシステムでRAMのスロットアドレスを探す場合は、サンプルプログラムの「RAMSRCH.MAC」を参照して下さい。

ページワークエリアのアドレス
0F341H
1F342H
2F343H
3F344H



戻り値

B 次のRETURN情報エリアのスロットアドレス
HL次のRETURN情報エリアの先頭アドレス
変更レジスタ
F
注意
スタックはページ3になければなりません。

したがって、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が存在している場合です。


図7.48 RETURN情報の形式

スロットアドレスの表現はMSX共通で以下の通りです。


図7.49 スロットアドレスの形式

 拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。

ケーパビリティベクトルは以下のようなビットパターンです。


図7.50 MSX-JEのケーパビリティベクトル

 このビット列は、装備されている日本語処理機能のサブセットとスーパーセットを示すためのビット列です。
 APはこのビット列をチェックし、利用可能な機能を確認した上でMSX-JEをコールして下さい。例えば、仮想端末インターフェイスのみを使用するAPはこのビット列と03HとのANDを取り、ビット0と1が0になっていることを確認します。
 MSX-JE側では、MSXのイニシャライズの時点で、自分の拡張BIOSエントリを【EXTBIO( 0FFCAH)】にフックします。拡張BIOSでは、DEレジスタが1000Hの場合に上記の動作をし、0の場合にはブロードキャストの動作を行います。それ以外の場合は、表レジスタの内容を保存したままリターンします。ブロードキャストについては、「7章拡張BIOSコール」をご覧下さい。

5.3.2 MSX-JEの呼び出し

 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);
    ...

 5.4 仮想端末入力インターフェイス

 以下ではMSX-JEの仮想端末入力インターフェイスの仕様を解説します。このインターフェイスの目的はAP側が日本語入力をサポートする場合の負担を軽くすることにあります。
 かな漢字変換に関係するユーザーインターフェイスはMSX-JE側で受け持ちます。したがって、このインターフェイスを使用するとき、かな漢字変換入力時にはAPは単にスクリーンメッセージを出力するだけです。つまり、APは、BIOSの文字入力ルーチンを使用するのと同じような手軽さで、日本語入力ができるようになります(図7.51参照)。
 日本語ワードプロセッサのように、かな漢字変換時にも自分自身で独自のユーザーインターフェイスを持ちたい場合や、画面上でなくプログラムでかな漢字変換を行いたい場合は、辞書インターフェイスを使用します。


図7.51 MSX-JEの変換動作

5.4.1 キー割り当て

 仮想端末入力インターフェイスでのキー入力処理は、かな漢字変換中は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に制御を戻します。

5.4.2 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の指している文字列をあたかもコンソールから
	   入力されたように処理する。 */
}

5.4.3 キーセンスの方法

 APと仮想端末入力インターフェイスとの間でキーのやり取りをするためには、キーのセンスをして仮想端末に制御を移すべき文字なのかを調べる必要があります。しかし、BIOSのCHSNS(009C/MAIN)では、キーバッファの状態を調べることはできても、その先頭の文字が何であるかを知ることはできません。そこで、以下の方法をとらなければなりません。

  1. CHSNSでキーバッファの内容を調べます。
  2. バッファが空でなければ、【GETPNT(0F3FAH,2)】の内容が示すアドレスにあるデータが、次にCHGETしたときに得られるキーコード。

5.4.4 STB(Screen image Text Block)

 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)

5.4.5 TTB(Transferrable Text Block)

 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)

5.4.6 ファンクション

表 7.97 仮想端末インターフェイス一覧

ファンクション番号ファンクション名機能
1 Inquiryワークエリアサイズの獲得
2 Invoke MSX-JEの起動
3 ReleaseMSX-JEの終了
4 Clear かな漢字変換バッファのクリア
5 [option] Set TTB再変換用データのTTBへの設定
6 DispatchMSX-JEに制御を渡す
7 Get Result変換結果の獲得
8 [option] Get TTBテキストの読みデータの獲得
9 [option] Inquire Window Sizeウィンドウ形式の設定
10 [option]Conflict detect制御キーの衝突防止


注意
[option]となっているファンクションは、APは使用しなくても良いが、使用することにより、より高度な処理が簡単にできるファンクションです。
また、ファンクション1〜3は仮想端末インターフェイスと辞書インターフェイスの両方で使用できます。

編集中

Inquiry (Function 1)
機能
ワークエリアサイズを獲得します。
コール手順
A 01H
戻り値
HL MAX(MSX-JEが使用するワークエリアの大きさの上限)
DE MIN(MSX-JEが使用するワークエリアの大きさの下限)
BC MIN2(MSX-JEが学習機能を使用するのに必要最小なサイズ)
注意
■AP
APがMSX-JEのために準備できるワークエリアの大きさをnとすると、必要なワークエリアの大きさは以下のようになります。
戻り値の関係ワークエリアの大きさ
n MIN(APはMSX-JEを使用できない)
MINn MIN2 MIN (APは学習機能を使用できない)
MINn MAX n
MAXn MAX
APは学習機能が使用できなくてもかまいません。また、常に2560バイトのワークが確保できるのであれば、このファンクションを呼ぶ必要はありません。
 
■MSX-JE
このファンクションに限って、ワークエリアのアドレスはパラメータとしてMSX-JEに渡されません。したがって、MSX-JEはワークエリアを使用できません。
関連項目
Invoke (Function 2)

編集中

Invoke (Function 2)
機能
MSX-JEを起動します。
コール手順
A 02H
HL ワークエリアのアドレス
DE ワークエリアの大きさ
戻り値
なし
解説
APで確保したワークエリアを初期化します。
注意
■AP
APは最低でも、Inquiry (Function 1)で返されたMIN以上のワークエリアが確保できなければなりません。DEレジスタにMIN以下の数を渡したときの結果は保証されません。
 
■MSX-JE
MSX-JEは使用するワークエリアの大きさが一定ならば、このファンクションのパラメータは無視してかまいません。
関連項目
Inquiry (Function 1)
Release (Function 3)
機能
MSX-JEを終了します。
コール手順
A 03H
HL ワークエリアのアドレス
戻り値
なし
解説
APが確保したメモリを解放します。
注意
■AP
APはシステムの再起動や学習辞書の更新が保証されなくてもよければ、このファンクションを呼び出さなくてもかまいません。
 
■MSX-JE
MSX-JEはこのファンクションによって、システムの再起動などに問題がなければ、なにもしなくてもかまいません。
関連項目
Inquiry (Function 1)
Invoke (Function 2)
Clear (Function 4)
機能
かな漢字変換用のバッファをクリアします。
コール手順
A 04H
HL ワークエリアのアドレス
戻り値
なし
解説
かな漢字変換用のバッファをクリアします。このファンクションにより、かな漢字変換モジュールはいままでの入力テキストをクリアします。
関連項目
Set TTB (Function 5)
Set TTB (Function 5) [option]
機能
APからMSX-JEに再変換したいテキストと読みデータを渡し、MSX-JEの内部バッファにセットします。
コール手順
A 05H
HL ワークエリアのアドレス
DE 再変換するテキストデータのアドレス
BC TTBのアドレス
戻り値
A 00H再変換可能
FFH再変換不能
解説
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の制御を渡します。
コール手順
A 06H
HL ワークエリアのアドレス
戻り値
A ステータス(後述)
HL STBのアドレス
解説
APからMSX-JEにCPUの制御を渡します。MSX-JEはテキスト表示の必要がある場合とAPに制御を戻す場合がある場合に、Aレジスタにステータスを、HLレジスタにSTBのアドレスをセットしてリターンします。MSX-JEが直接表示することなく、表示するテキストはSTB (Screen image Text Block) の形でAPに渡され、APが表示することになります。
■Dispatchのステータス
ビット意味
01 APがSTBの表示を行う。
11 APが変換結果を得られる。
21 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は表示テキストの全内容を含んでいます。
 
関連項目
5.4.4 STB

編集中

Get Result (Function 7)
機能
変換結果を返します。
コール手順
A 07H
HL ワークエリアのアドレス
戻り値
HL 得られた変換結果の先頭アドレス
解説
変換結果を返します。変換結果は00Hで終わるシフトJIS文字列です。APは得られたテキストをあたかもコンソールから入力されたのと同じように処理します。
関連項目
Dispatch (Function 6)
Get TTB (Function 8) [option]
機能
Get Resultで得られたテキストの読みデータを獲得します。
コール手順
A 08H
HL ワークエリアのアドレス
戻り値
HL TTBのアドレス
解説
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 ウィンドウ形式の最大長
戻り値
HL ウィンドウ指定データのアドレス
解説
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



関連項目

5.4.4 STB
Conflict detect (Function 10) [option]
機能
キー割り当ての衝突を防ぎます。
コール手順
A 0AH
HL ワークエリアのアドレス
戻り値
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を返します。
関連項目
5.4.1 キー割り当て

 5.5 辞書インターフェイス

 ここでは、MSX-JEの辞書アクセスインターフェイスについて解説します。辞書インターフェイスは日本語ワープロなど、高度なAPが使用するのに適したファンクションです。
 ゲームなど日本語入力を主体としないAPには、仮想端末入力インターフェイスが適しています。
 ユーザーがAPごとに異なるユーザーインターフェイスを強いられ、困惑することを避けるためにも、特に必要のない限り、仮想端末インターフェイスを使用することを推奨します。

5.5.1 テキストデータ形式

 辞書インターフェイスでは、テキストは常に以下のようなフォーマットで扱い、BCレジスタまたはDEレジスタで示されるバッファに置きます。


 全角文字はシフトJISコードを用い、文字数は半角(バイト数)です。

5.5.2 ファンクション

表 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);
 
■入力データ
s 3ABC(半角文字列)
 
■実行結果
d 6ABC(全角文字列)

編集中

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);



■入力データ

s 6ABC(全角文字列)



■実行結果

d 3ABC(半角文字列)

編集中

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);



■入力データ

s 8katakana(半角文字列)



■実行結果

d 8カタカナ(全角文字列)

編集中

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);



■入力データ

s 8hiragana(半角文字列)



■実行結果

d 8ひらがな(全角文字列)

編集中

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);



■入力データ

s 8カタヒラ(全角文字列)



■実行結果

d 8かたひら(全角文字列)

編集中

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);



■入力データ

s 8ひらかた(全角文字列)



■実行結果

d 8ヒラカタ(全角文字列)

編集中

open_dic (Function 46H)
機能
将来の拡張用です。
コール手順
A 46H
HL ワークエリアのアドレス
DE 0
戻り値
A 05H (常に5を返す)
解説
この機能は将来の拡張のために用意されています。アプリケーションはこの機能を呼ぶ必要はありません。

編集中

henkan (Function 47H)
機能
全角カタカナ文字列、全角ひらがな文字列を漢字かな混じり文字列に変換します。
コール手順
A 47H
HL ワークエリアのアドレス
DE 読みデータのアドレス
戻り値
A 00H候補なし
0以外候補の数
解説
全角カタカナ文字列、全角ひらがな文字列を漢字かな混じり文字列に変換します。戻り値として、先頭文節の候補数が返ります。変換結果は、ji_koho(Function 48H)などで取り出すことができます。
以下のプログラムは文字列tに入っている読みデータを漢字かな混じり文字列に変換します。
 
■プログラム
#define henkan(s, d) mjea((char)0x47, s)
char t[65]; TINY n;
n = henkan(t);



■入力データ

t 10ヤマノウエ(全角文字列)



■実行結果

nに先頭文節「ヤマノ」の候補数をセットされます。変換結果はji_kohoなどで得ることができます。

編集中

ji_koho (Function 48H)
機能
先頭文節の候補群の中の次の候補を1つ獲得します。
コール手順
A 48H
HL ワークエリアのアドレス
DE 候補バッファ
BC 後続文節バッファ
戻り値
A 00H候補なし
0以外候補番号
解説
先頭文節の候補群の中の次の候補を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);



■入力データ

text 16ヤマノウエノイエ(全角文字列)



■実行結果

cand 4山の(全角文字列)
 
rest 6上の家(全角文字列)

編集中

zen_koho (Function 49H)
機能
先頭文節の候補群の中の1つ前の候補を獲得します。
コール手順
A 49H
HL ワークエリアのアドレス
DE 候補バッファ
BC 後続文節バッファ
戻り値
A 00H候補なし
0以外候補番号
解説
先頭文節の候補群の中の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);



■入力データ

text 12キカイヲミテ(全角文字列)
 
■実行結果
1回目のji_kohoの結果
cand 6機械を(全角文字列)
 
rest 4見て(全角文字列)
 
2回目のji_kohoの結果
cand 6機会を(全角文字列)
 
rest 4見て(全角文字列)
 
zen_kohoの結果
cand 6機械を(全角文字列)
 
rest 4見て(全角文字列)

編集中

ji_block (Function 4AH)
機能
現在の候補群の次に優先度の低い候補群を作成し、候補数を返します。
コール手順
A 4AH
HL ワークエリアのアドレス
戻り値
A 00Hブロックなし
0以外候補の数
解説
現在の候補群の次に優先度の低い候補群を作成し、候補数を返します。前もって、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キョウハイシャニイッタ(全角文字列)
 
■実行結果
rest 6今日は(全角文字列)
 
cand 12医者にいった(全角文字列)
 
2回目のji_koho
cand 4今日(全角文字列)
 
rest 14歯医者にいった(全角文字列)

編集中

zen_block (Function 4BH)
機能
現在の候補群より優先度の高い候補群を作成し候補数を返します。
コール手順
A 4BH
HL ワークエリアのアドレス
戻り値
A 00Hブロックなし
0以外候補の数
解説
現在の候補群より優先度の高い候補群を作成し候補数を返します。前もって、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キョウハイシャニイッタ(全角文字列)
 
■実行結果
1回目のji_kohoの結果
cand 6今日は(全角文字列)
 
rest 12医者にいった(全角文字列)
 
2回目のji_kohoの結果
cand 4今日(全角文字列)
 
rest 14歯医者にいった(全角文字列)
 
3回目のji_kohoの結果
cand 6今日は(全角文字列)
 
rest 12医者にいった(全角文字列)

編集中

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);
 
■入力データ
s 14キシャノキシャ(全角文字列)
 
■実行結果
t 10貴社の記者(全角文字列)

編集中

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);
 
■入力データ
s 14キシャノキシャ(全角文字列)
 
■実行結果
n = 8
 
t 6 貴社の(全角文字列)
←   8バイト  →
s 14キシャ・・・6キシャ(全角文字列)
u↑

編集中

close_dic (Function 4EH)
機能
ダミーのファンクションで、何もしません。
コール手順
A 4EH
HL ワークエリアのアドレス
戻り値
A 00H(常に0)
解説
この関数は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バイト以下の全角カタカナコードです。ただし「ヮ」、「ヰ」、「ヱ」、「ヴ」、「ヵ」、「ヶ」は、処理系によって登録・削除できない可能性があります。
 
単語データ
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ミツオ(全角文字列)
 
←   4バイト   →
tan 4光雄(全角文字列)3
 
■実行結果
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バイト以下の全角カタカナコードです。ただし「ヮ」、「ヰ」、「ヱ」、「ヴ」、「ヵ」、「ヶ」は、処理系によって登録・削除できない可能性があります。
 
単語データ
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ミツオ(全角文字列)
 
←   4バイト   →
tan 4光雄(全角文字列)3
 
■実行結果
n = 0
読みが「ミツオ」で品詞が人名(名)である「光雄」が削除されます。

 5.6 VJE-80およびVJE-80A使用上の注意

 ここでは、アスキーが開発したVJE-80(日本語MSX-Writeに搭載)、VJE-80A(日本語MSX-Write2に搭載)を使用する上で、特に注意しなければならないことを解説します。VJE-80およびVJE-80Aの仕様については、各仕様書をご覧下さい。

5.6.1 MSX-JEの起動

1.実装の確認
 MSX-JEを使用するAPは、必要とするインターフェイスを持つMSX-JEデバイスがMSXに実装されているかを確認しなければなりません。
 もし必要とするデバイスが実装されていない場合は、日本語入力ができないことをユーザーに知らせる処理を終了するか、もしくは他の方法で日本語処理をしなければなりません。例えば、単漢字変換機能をAP側で持つなどが考えられます。
 MSX-JEのアクセス方法は、「5.3.1 エントリアドレスの獲得」をご参照下さい。
 エントリアドレスの獲得ファンクションによる、HLレジスタの値およびケーパビリティベクトルの内容から自分が使用するMSX-JEの有無、仕様などを判断してください。
 具体的には次のようにします。

  1. HLレジスタの内容からテーブルが作成されたことを確認します。指定デバイスが実装されていればHLレジスタの内容が更新されています。
  2. ケーパビリティベクトルの内容から仕様を判断します。1.、2.いずれの場合も使用不可ならばエラー処理して下さい。
  3. MSX-JEのケーパビリティベクトルは図7.50のようになっています。

各ビットから自分が使用できるものかを判断して下さい。

仮想端末インターフェイスのみを使用するときは、以下のようにします。

ld   a, ケーパビリティベクトル
and  03h
jnz  エラー処理エントリ

辞書インターフェイスのみを使用する時は、以下のようにします。

ld   a, ケーパビリティベクトル
and  05h
jnz  エラー処理エントリ

辞書、仮想端末入力インターフェイスの両者を使用するときは、以下のようにします。

ld   a, ケーパビリティベクトル
and  07h
jnz  エラー処理エントリ
注意
  1. VJE-80のケーパビリティベクトルはF8Hですが、他のFEPがそうなっているとは限りません。商用のAPはケーパビリティベクトルとF8Hとのコンペアをとるなどの方法で、MSX-JEの有無や仕様を判断してはいけません。
  2. 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のスロットアドレス、エントリアドレスをインタースロットコールします。

5.6.2 仮想インターフェイスを使用するときの注意点

 以下に、仮想端末インターフェイスを使うときの注意を説明します。

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文字を消す。

5.6.3 VJE-80とVJE-80Aとの互換性

 MSX-JEの仕様を遵守している限り、互換性は保証します。
 ただし、VJE-80Aのサポートする関数はVJE-80よりも増えています。また、ワークエリアの大きさも異なります。
 このため、VJE-80Aで動作したAPが必ずVJE-80で動作するとは限りません。特にVJE-80Aだけがサポートする関数を使った場合は、MSX-JE間での互換性もとれなくなりますのでご注意下さい。
 なお、SRAM上の辞書および学習情報は、クローズしないで電源OFFまたはリセットされると壊れます。必ず、releaseによってメモリを解放して、辞書をクローズして下さい。

5.6.4 VJE-80およびVJE-80Aでの禁止事項

 VJE-80およびVJE-80Aを使用する場合に絶対行ってはならないことを記しておきます。この内容は通常起こらないはずですが、デバッグ中などに原因不明の症状が起こったとき、調べてみて下さい。

  1. VJE-80およびVJE-80Aを含むスロットのページ1の任意アドレスにデータを書き込むことは禁止します。これは、VJE-80およびVJE-80Aがバンク構造で動いており、そのバンクセレクタがこの領域にマッピングされているためです。
  2. VJE-80Aではページ2の後半(A000H〜B000H)にワークエリアおよびユーザー辞書、学習情報などを保存しているSRAMがマッピングされます。したがって、この領域に対して書き込みを行ったときの動作保証はできません。
← 4.5 Y8950(MSX-AUDIO) 6章 24トッド漢字プリンタ?