MSX Datapack wiki化計画

2章 MSX MODEM

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 2.1 ハードウェア

2.1.1 基本構成

 MSX MODEMの基本ハードウェア構成は下図のとおりです。シリアルインターフェイスとしてi8251相当、ROM 32Kバイト、RAM(バッテリバックアップ)8Kバイト、NCU制御のためのパラレルポートとしてi8255相当を基本前提としています。ただし、後述のBIOSにより、この基本ハードウェアとは異なった構成のハードウェアにも移植が可能です。


図7.8 MSX MODEMの基本構成

 短縮ダイヤルやシステムの設定値を記憶するためのバッテリバックアップされたCMOS RAMはオプション設定とします。ソフトウェアではファイルとしてのデータアクセスをサポートするため容量は任意ですが、ディレクトリ領域を必要とすることなどから少なくとも2Kバイト程度が実用限界と思われます。単にシステムのコンフィギュレーションを記憶しておくメモリスイッチとしてなら必要最小限の容量でも動作可能です。なお、短縮ダイヤル用メモリは1件につき約100バイト程度の容量が必要です。

 2.2 NUCの構成

 NCUは図8.9のハードウェアを想定しています。この図は想定しているすべてのハードウェア機能を記載していますので、必ずしもこのような構成が実際的であるわけではありません。


図7.9 NCUの構成
 SW1は回線をモデムダイアラに接続するか、外部電話機に接続するかを選択します。SW2は電話線上の音を装置付属のスピーカまたはMSXのカートリッジバスを通じてTVのスピーカでモニタするかどうかを選択します。RI信号はリングパルスをワンショットなどにより波形整形されたものとします。したがって、リング信号が存在するあいだ1が返されます。内蔵ハンドセット、内蔵ハンズフリーフォンは他の電話機能、たとえば音楽を回線に送り出したりするものと置き換えることができます。

 2.3 メモリの構成

 MSX MODEMのシステムソフトウェアが実行するためには、図8.10で示すメモリ構成が必要です。ここでいうBANKとはMSX本来のBANKではなく、同一スロット内でローカルに拡張されたBANKを意味します。


図7.10 メモリの構成

 2.4 I/Oの構成

 I/Oレジスタはすべてメインメモリ空間上に配置しなければなりません。アドレスの40H番地からFFH番地はMSXシステム標準装置のための領域ですので、その装置が標準装置として認められない限り使うことができません。
 00番地から3F番地は規定されていませんので使用することが可能ですが、規定されていないために、他のものと同じ番地を割り当ててしまいますと、システムが動作しない事態がおこってしまいます。
 これを避けるために、必ずメモリ空間に配置して下さい。

 2.5 拡張BASIC

2.5.1 概要

 MSX MODEMには、各機能を簡単に使用できるように、MSX MODEM拡張BASICが用意されています。コマンド、ステートメント、関数はMSX BASIC、MSX Disk BASICと同じですが、書式や指定方法の違いにより、通信が行えるように機能が拡張されています。
 使い方は、CALL COMINIのように拡張ステートメントの形式です。CALLは_(アンダーバー)で代用できます。
 デバイス番号は、スロット番号の小さいスロットにさしこまれている通信用カートリッジの順に、0から割り当てられます。MSX RS-232Cカートリッジなど、MSX MODEM以外の通信用カートリッジといっしょに使用された場合にも、同様にスロット順に0から割り当てられます。
 通信用カートリッジには、RS-232Cインターフェイス、MODEMカートリッジ、「MSX-SERIAL232」などがあります。

2.5.2 この章の表記法

2.5.3 拡張BASICコマンド一覧

1.拡張ステートメント(CALL文と共に使用します)

コマンド名機能ページ
COMBREAK*電話回線にブレーク信号を送出します153
COM GOSUB*通信用ポートから割り込みがかかると指定したサブルーチンを実行します153
COMHELPCOMINIのHELPメッセージを表示します154
COMINI*通信回線の初期化を行います155
COMOFF*通信用ポートからの割り込みを禁止します158
COMON*通信用ポートからの割り込みを許可します159
COMPROTOCOL*ファイル転送に用いるプロトコルを決定します159
COMSTAT*通信用ポートのステータスを求めます161
COMSTOP*通信用ポートからの割り込みを保留します163
COMTERM*ターミナルモードに切り換えます164
DIAL電話番号送出を行います169
DIALC1桁だけの電話番号を送出します171
DTMFDTMFデコーダよりデータを読み取ります172
LINESEL*回線の切り換えを行います173
NETCARRIER半2重通信時のキャリアを制御します174
NETCONFIG*ハードウェアのコンフィグレーションを返します175
NET GOSUB電話回線に着呼があったとき、またはDTMFデータが来たとき指定したサブルーチンを実行します177
NETHOOK回線の切断・接続を行います178
NETINI*NCUの初期設定を行います179
NETMODEMモデムの送出電力及びイコライザのON/OFFを指定します180
NETOFF電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを禁止します181
NETON電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを許可します182
NETSPKスピーカをON/OFFします183
NETSTAT*NCUのハードウェアの状態を返します183
NETSTOP電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを保留します185

2.コマンド

コマンド名機能ページ
LOAD*BASICプログラムを通信ポートからメモリにロードします186
MERGE*プログラムを通信ポートからロードし、メモリ上のプログラムとマージ(混合)します187
RUN*BASICプログラムを通信ポートからメモリにロードし実行します187
SAVE*BASICプログラムを通信ポートに送ります188

3.ステートメント

コマンド名機能ページ
CLOSE*OPEN文で開いたファイルを閉じます189
INPUT#*OPEN文で開かれたファイルからデータを順に読み取り、変数に代入します190
LINE INPUT#*254文字までの文字列をファイルから読み取り、文字型変数に代入します191
OPEN*通信用ファイルを開きます191
PRINT#*OPEN文で開かれたファイルにデータを書き込みます192
PRINT#USING*OPEN文で開かれたファイルに指定した書式でデータを書き込みます193

4.関数

コマンド名機能ページ
EOF*ファイルの最後のデータが読み取られたかどうかを返します196
INPUT$*ファイルから指定した数の文字を入力します196
LOC*ファイルの中の文字数を返します197
LOF*ファイルの中の空きスペースの大きさを返します198

 *のステートメントは必須です。
 その他は、ハードウェアがサポートしていなければ、「Illegal function call」になります。
 デバイス番号が省略されたときは、0となります。
 また、COMSTATとCOMBREAKは、その実行前に「OPEN"COM:"」命令が実行されていなければ「File not open」になります。
 ハードウェアがその機能をサポートしているか否かは、CALL NETCONFIG命令で求められます。

2.5.4 拡張BASICの解説

1,拡張ステートメント

CALL COMBREAK

機能

 電話回線にブレーク信号を送出します。

書式

 CALL COMBREAK[("デバイス番号:"],式)]

解説

 式で指定された文字数文のブレーク信号を電話回線に出力します。ブレーク信号送出中、すべての送出データは強制的に0になります。
 CALL COMBREAK文を実行する前にOPEN文でCOM用のファイルがオープンされていなければ「File not open」になります。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはコロン(:)まで省略します。

 
 数値定数、変数、配列変数、式で指定します。指定できる範囲は3から32767までの値です。省略した場合は1、0になります。

文例

 CALL COMBREAK("0:",20)
 20文字分のブレイク信号を電話回線に出力します。

CALL COM GOSUB

機能

 通信用ポートから割り込みがかかると指定したサブルーチンへ実行を移します。

書式

 CALL COM(["デバイス番号:"],GOSUB 行番号)

解説

 CALL COMON分を使って割り込みを許可してから、データが受信されると、割り込みがかかり、行番号で指定されたサブルーチンに実行が移ります。サブルーチンはRETURN文で終了します。サブルーチンの実行終了後は割り込みがおこった時点で実行していたステートメントの次のステートメントに戻ります。
 サブルーチン実行中は自動的にCOMSTOP状態になり、サブルーチン内でCOMOFFしないかぎり、RETURNによってCOMON状態になります。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 行番号'
 0から65529までの整数型定数で指定します。

文例
CALL COM("0:", GOSUB 1000)
デバイス番号0から割り込みがかかると、行番号1000で始まるサブルーチンを実行します。
CALL COM(, GOSUB 2000)
デバイス番号0から割り込みがかかると、行番号2000で始まるサブルーチンを実行します。

CALL COMHELP

機能

 COMINIのHELPメッセージを表示します。

書式

 CALL COMHELP[("デバイス番号:")]

解説

 次の様にメッセージを表示します。

Initialize statement options
CALL COMINI("
<device #{0,1,2...9}>
<character length {5,6,7,8}>
<parity {E,O,I,N}>
<stop bits {1,2,3}>
<XON/XOFF {X,N}>
<1 dummy {any character}>
<auto LF on receive {A,N}>
<auto LF on transmit {A,N}>
<SI/SO {S,N}>
, <receive speed(BPS)>
, <send speed(BPS)>
, <time out count> )
Default:
CALL COMINI("0:8NIX NNN",300, 300 ,0)

 デバイス番号
 省略するとデバイス番号は0と見なされます。

文例
CALL COMHELP("0:")
CALL COMHELP
デバイス番号0にさしこんである通信カートリッジのCOMONI文で設定できる通信モードの項目を表示します。

CALL COMINI

機能

 通信回線の初期化を行います。

書式

 CALL COMINI[("[デバイス番号:][デバイス番号:][キャラクタ長[パリティ[ストップビット長[XON/XOFF制御[ダミー[受信LF[送信LF[SI/SO制御]]]]]]]]")[,[受信速度][,[送信速度],[タイムアウト]]]])]

解説

 通信に必要なパラメータの設定を行います。COMINIを実行しなくても電源投入時、RESET時に省略値で初期設定されます。

 デバイス番号
 0(*)〜9までの整数値を指定します。省略するときはコロン(:)まで省略します。省略するとデバイス番号は0:になります。

 キャラクタ長
 接続する機種に合わせて送信する1キャラクタのビット数を5,6,7,8の範囲で指定します。省略するとキャラクタ長は8になります。

 パリティ
 パリティチェックの方法を指定します。

 ストップビット長
 ストップビットのビット数を指定します。

 XON/XOFF制御
 XON/XOFFによるフロー制御を行うかどうかを指定します。

 ダミー
 RS-232Cの拡張BASICと互換性を持たせるためのダミーデータです。スペースを設定してください。

 受信LF挿入
 CR(0DH)コードを受信したときに、CRコードとLF(0AH)コードに変換する制御です。

 送信LF削除
 CR(0DH)コードの次にLF(0AH)コードを続けて送信するとき、LFコードを削除して、CRコードのみを送信する制御です。

 SI/SO制御
 キャラクタ長が7ビットのときに、080Hから0FFHコードに対してSI/SO制御の指定を行います。

 送信速度
 送信側の速度を設定します。その速度がサポートされていない場合はシステムのデフォルト値または指定速度より遅いモデムの速度に読み替えられます。

 受信速度
 受信側の速度を設定します。その速度がサポートされていない場合はシステムのデフォルト値または指定速度より遅いモデムの速度に読み替えられます。

 タイムアウト
 XON/XOFFコントロールの待ち時間を0(*)〜255の整数値で指定します。単位は約1秒です。省略した場合や、0を指定した場合はタイムアウトしません。

文例

CALL COMOFF

機能

 通信用ポートからの割り込みを禁止します。

書式

 CALL COMOFF[("デバイス番号:")]

解説

 通信用ポートからの割り込みを禁止します。CALL COMOFF後に通信ポートデータが来ても割り込みは発生しません。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

文例

CALL COMON

機能

 通信用ポートからの割り込みを許可します。

書式

 CALL COMON[("デバイス番号:")]

解説

 CALL COMON実行後に通信ポートにデータが来ると割り込みが発生し、CALL COM GOSUB文で指定してある業のサブルーチンが実行されます。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

文例

CALL COMPROTOCOL

機能

 ファイル転送に用いるプロトコルを決定します。

書式

 CALL COMPROTOCOL[(["デバイス番号:][プロトコル]"],タイマ1][,タイマ2?)]

解説

 ファイル転送に用いるプロトコルを決定します。COMINIを実行しなくても電源投入時、RESET時に省略値で初期設定されます。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 プロトコル

 タイマ1
 プロトコルがTおよびRの場合は送出する文字間の時間となります。この値は1/60秒単位となります。省略時は0とします。
 プロトコルがXおよびCの場合はXMODEMプロトコルのタイムアウト値となり、秒単位で指定します。省略時は10とします。
 数値型変数、変数、配列変数、式で指定できます。

 タイマ2
 プロトコルがTおよびRの場合は送出する行間の時間となります。この値は1/60秒単位となります。省略時は0とします。
 プロトコルがXおよびCの場合はXMODEMプロトコルのブロック監視タイマ値となり、秒単位で指定します。省略時は20とします。
 数値型変数、変数、配列変数、式で指定できます。

 COMTERMでファイルのUP/DOWNLOADを行う時、次のようにXON/XOFF制御の設定を行います。

文例
CALL COMPROTOCOL("0:T")
デバイス番号0の通信カートリッジでファイルをテキスト転送します。

CALL COMSTAT

機能

 通信用ポートのステータスを求めます。

書式

 CALL COMSTAT(["デバイス番号:"],数値変数)

解説

 通信用ポートのステータスを2バイトの数値型データとして返し、数値変数に代入します。

 数値変数
 整数型変数で、各ビットの意味は次のとおりです。

 ビット0
 キャリア信号の検出

 ビット1
 被呼表示(リングインジケータ)の検出

 ビット2
 ブレーク信号の検出

 ビット3
 データセットレディ

 ビット4
 NCU機能

 ビット5
 未使用(常に0)

 ビット6
 未使用(常に0)

 ビット7
 未使用(常に0)

 ビット8
 未使用(常に0)

 ビット9
 Long loop検出

 ビット10
 CTRL+STOPキー検出

 ビット11
 パリティエラー

 ビット12
 オーバーランエラー

 ビット13
 フレーミングエラー

 ビット14
 タイムアウトエラー

 ビット15
 オーバフローエラー

 CALL COMSTAT文を実行する前に、OPEN文でCOM用のファイルがオープンされていなければ「File not open」になります。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 CALL COMSTAT文を実行する前に、OPEN文でCOM用のファイルがオープンされていなければ「File not open」になります。

文例

CALL COMSTOP

機能

 通信用ポートからの割り込みを保留します。

書式

 CALL COMSTOP[("デバイス番号:")]

解説

 CALL COMSTOP実行後に通信用ポートにデータが来ても次にCALLCOMONが実行されるまで割り込みが保留されます。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

文例
CALL COMSTOP("0:")
または
CALL COMSTOP
デバイス番号0からの割り込みを保留します。

CALL COMTERM

機能

 ターミナルモードに切り換えます。

書式

 CALL COMTERM[("[デバイス番号:][文字セット[インターレース[漢字コード[DEL受信処理]]]]")]]

解説

 コンピュータをターミナルモードに切り替えます。この時、回線はモデム側に切り替えます。また、HOOKはOFFに切り替えます。回線が接続されていない場合は、「Device I/O Error」となります。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 文字セット
 表示に使用する文字フォントを指定します。

 インターレース
 ノンインターレースかインターレースかを指定します。インターレースの指定はMSX2、MSX2+で文字セットが漢字、グレイスケール漢字、および12ドット数字の時有効で、その他の時は無視します。
 漢字コード
 漢字コードを指定します。漢字コードの指定は文字セットが漢字、グレースケール漢字、および12ドット漢字で、日本語入力フロントエンド(MSX-JE)がサポートされているときのみ有効です。それ以外の時は無視されます。

 DEL受信処理
 
1.ターミナルモードの使用方法
 ターミナルモードでは、以下のキーを使って、オプション機能を設定できます。

表7.14 ターミナルモードのオプション機能

キー機能
SHIFT+F1リテラルモードの切り換え
SHIFT+F2エコーバックの切り換え
SHIFT+F3プリンタエコーバックの切り換え
STOPブレーク信号の送信
SHIFT+F4アップロード
SHIFT+F5ダウンロード
SHIFT+SELECTターミナルモードの一時中断
GRAPH+SELECT、日本語入力布団とエンド実行/終了
CTRL+SPACE

1.リテラルモード
 SHIFT+F1でON、OFFを切り換えます。
 ONの時は、アスキーコードの1FH以下に割り当てられているコントロールコードは、すべてはっとマーク(^)とコントロールコードに40Hを足したコードであらわされる文字として画面に表示されます。例えば、CRコード(0DH)は、

^M

 と画面に表示されます。(Mのコードは4DH)
 XON/OFF制御を指定しているときは、XONとXOFFコードは表示されません。
 もう一度、SHIFT+F1を押すと、リテラルモードはOFFになります。

2.ローカルエコーバック
 SHIFT+F2でON、OFFを切り換えます。
 ONの時は、キーボードから入力したデータは、相手のコンピューターに送られるとともにもう一度、SHIFT+F2を押すと、エコーバックはOFFになります。
 画面に表示されます。

3.プリンタエコーバック
 SHIFT+F3でON/OFFを切り換えます。
 ONの時は、画面に表示されたデータがプリンタに出力されます。10秒以上プリンタに出力されない状態が続くとこのモードは解除されます。
 もう一度、SHIFT+F3を押すと、プリンタへのエコーバックはOFFになります。

4.ブレーク信号の送出
 STOPキーを押すと、ブレーク信号が100文字分出力され、送信データが0になります。

5.アップロード
 SHIFT+F4でON/OFFを切り換えます。
 ONの時は、ファイルを相手のコンピュータに送ります。再度このキーを押すとアップロードを中断します、ただし、XMODEMを使用している場合は中断できません。

6.ダウンロード
 SHIFT+F5でON/OFFを切り換えます。
 ONの時は、ファイルを相手のコンピュータから受け取ります。再度このキーを押すとダウンロードを中断します、ただし、XMODEMを使用している場合は中断できません。

7.ターミナルモードの一時中断
 SHIFT+SELECTでON/OFFを切り換えます。
 ONの時に、ターミナルモードを中断します。この時回線は保持されます。

8.日本語入力フロントエンド実行/終了
 GRAPH+SELECTまたはCTRL+SPACEでON/OFFを切り換えます。
 ONの時、日本語漢字入力フロントエンドの実行を開始します。

2.各モードの設定条件
1.MSX1
表7.15 MSX1K時のスクリーンモード

指定COMTERM入力時のスクリーンモード
0123
AN、AIAN2AN2AN2AN2
MN、MIMN2MN2MN2MN2
KN、KIKN2KN2KN2KN2
GN、GIKN2KN2KN2KN2
SN、SISN2SN2SN2SN2

2.MSX2(VRAM64K)
表7.16 VRAM64K時のスクリーンモード

指定画面サイズCOMTERM入力時のスクリーンモード
0123456
AN、AI1〜40AN2AN2AN2AN2AN2AN5AN6
41〜80AN6-AN2AN2AN2AN5AN6
MN、MI1〜40MN2MN2MN2MN2MN2MN5MN6
41〜80MN6-MN2MN2MN2MN5MN6
KN1〜40KN2KN2KN2KN2KN2KN5KN6
41〜80KN6-KN2KN2KN2KN5KN6
KI1〜40KN2KN2KN2KN2KN2KI5KI6
41〜80KN6-KN2KN2KN2KI5KI6
GN1〜40KN2KN2KN2KN2KN2GN6GN6
41〜80GN6-KN2KN2KN2GN6GN6
GI1〜40KN2KN2KN2KN2KN2GI6GI6
41〜80GI6-KN2KN2KN2GI6GI6
SN1〜40KN2KN2KN2KN2KN2SN5SN6
41〜80SN6-KN2KN2KN2SN5SN6
SI1〜40KN2KN2KN2KN2KN2SI5SI6
41〜80SI6-KN2KN2KN2SI5SI6

3.MSX2、MSX2+
表7.17 VRAM128K時のスクリーンモード

指定画面サイズCOMTERM入力時のスクリーンモード
012345678
AN、AI1〜40AN2AN2AN2AN2AN2AN5AN6AN7AN5
41〜80AN7-AN2AN2AN2AN5AN6AN7AN5
MN、MI1〜40MN2MN2MN2MN2MN2MN5MN6MN7MN5
41〜80MN7-MN2MN2MN2MN5MN6MN7MN5
KN1〜40KN2KN2KN2KN2KN2KN5KN6KN7KN5
41〜80KN7-KN2KN2KN2KN5KN6KN7KN5
KI1〜40KN2KN2KN2KN2KN2KI5KI6KI7KI5
41〜80KI7-KN2KN2KN2KI5KI6KI7KI5
GN1〜40KN2KN2KN2KN2KN2GN6GN6GN6GN6
41〜80GN6-KN2KN2KN2GN6GN6GN6GN6
GI1〜40KN2KN2KN2KN2KN2GI6GI6GI6GI6
41〜80GI6-KN2KN2KN2GI6GI6GI6GI6
SN1〜40KN2KN2KN2KN2KN2SN5SN6SN7SN5
41〜80SN7-KN2KN2KN2SN5SN6SN7SN5
SI1〜40KN2KN2KN2KN2KN2SI5SI6SI7SI5
41〜80SI7-KN2KN2KN2SI5SI6SI7SI5

3.ターミナルモードの例

CALL COMTERM("0KI")
CALL COMTERM("KI")

 この例は、デバイス番号0の通信カートリッジで、キャラクタを漢字、インタレースでターミナルモードを実行します。

CALL DIAL

機能

 電話番号送出を行います。

書式

 CALL DIAL(["デバイス番号:"],電話番号[,モード])

解説

 電話番号の文字列にしたがって回線をダイヤルに接続し、約3秒後に(ただし、コールプログレストーン検出機能がある場合は、ダイヤルトーン検出後すみやかに)ダイヤル送出を開始します。
 回線使用中及び回線が接続されていない場合は「Device I/O Error」となります。
 ダイヤル終了後、回線はモデム側のままです。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 電話番号
 電話番号として使用できるのは以下の半角文字です。

 モード
 電話回線の種類を数値定数、変数、配列変数、式で指定します。
 サポートされていない機能を選択したときは「Illegal function call」になります。

文例
注意

 ハードウェアでサポートされてないときは、「Illegal function call」になります。

CALL DIALC

機能

 1桁だけの電話番号を送出します。

書式

 CALL DIALC(["デバイス番号:"],1桁の電話番号[,モード])

解説

 1桁だけダイヤル送出を行います。2桁以上は「Illegal function call」になります。回線をダイヤルに接続します。
 回線が接続されていない場合は「Device I/O Error」となります。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 電話番号
 電話番号として使用できるのは以下の半角文字です。

 モード
 電話回線の種類を数値定数、変数、配列変数、式で指定します。
 サポートされていない機能を選択したときは「Illegal function call」になります。

文例
注意

 ハードウェアでサポートされてないときは、「Illegal function call」になります。

CALL DTMF

機能

 DTMFデコーダよりデータを読み取ります。

書式

 CALL DTMF(["デバイス番号:"],文字変数)

解説

 DTMFデコーダよりデータを読み取り、文字変数に代入します。データが来ていない場合は来るまで待ちます。
 文字変数には最大32バイトのDTMFコードが入りますが、それ以上のDTMFコードは無視します。
 CTRL+STOPの入力があった場合は中止します。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 電話番号
 電話番号として使用できるのは以下の半角文字です。
 上記以外の文字は無視しますが、サポートされていない機能(文字)を指定したときは「Illegal function call」になります。ただし、a〜d,hは大文字に読み替えます。

 モード
 電話回線の種類を数値定数、変数、配列変数、式で指定します。
 サポートされていない機能を選択したときは「Illegal function call」になります。

文例
CALL DIALC("0:","3",0)
デバイス番号0の通信カートリッジから番号"3"を電話回線に送り出します。使用する電話はプッシュホンとします。
注意

 ハードウェアでサポートされてないときは、「Illegal function call」になります。

CALL LINESEL

機能

 回線の切り換えを行います。

書式

 CALL LINESEL(["デバイス番号:"],数値変数)

解説

 電話回線を電話機に接続するか、内蔵モデムに接続するかを選択します。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 数値変数
 各ビットの意味は次のとおりです。

 ビット0

 ビット1

 ビット2

 ビット3

 ビット4

 サポートされていない機能のビットを1にしたときは「Illegal function call」になります。
 数値変数を省略したときは「Syntax error」になります。

文例

 CALL LINESEL("0:”,0)
 電話回線をデバイス番号0の通信カートリッジ側に切り替えます。

 A=&B11000;CALL LINESEL(,A)
 電話回線を電話機側に切り替えます。

注意

 ハードウェアでサポートされてないときは、「Illegal function call」になります。

CALL NETCARRIER

機能

 半2重通信時のキャリアを制御します。

書式

 CALL NETCARRIER(["デバイス番号:"],数値変数[ [,タイマ1][,タイマ2]])

解説

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

 数値変数
 数値型変数、変数、配列変数、式で指定できます。

 タイマ1
 このコマンドがコールされてからモデムのRS信号をONにするまでの時間となります。この値は10m秒単位となります。
 数値型変数、変数、配列変数、式で指定できます。

 タイマ2
 モデムのCS信号がONになってからNETCARRIERコマンドがリターンするまでの時間となります。この値は10m秒単位となります。
 数値型変数、変数、配列変数、式で指定できます。

文例

CALL NETCONFIG

機能

 ハードウェアのコンフィグレーションを返します。

書式

 CALL NETCONFIG(["デバイス番号:"],モード,数値変数)

解説

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。省略するときはコロン(:)まで省略します。

文例

CALL NET GOSUB

機能

 電話回線に着呼があったとき、またはDTMFデータが来たとき指定したサブルーチンを実行します。

書式
解説
文例

CALL NETHOOK

機能

 回線の切断・接続を行います。

書式
解説
文例

CALL NETINI

機能

 NCUの初期設定を行います。

書式
解説
文例

CALL NETMODEM

機能

 モデムの送出電力及びイコライザのON/OFFを指定します。

書式
解説
文例

CALL NETOFF

機能

 電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを禁止します。

書式
解説
文例

CALL NETON

機能

 電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを許可します。

書式
解説
文例

CALL NETSPK

機能

 スピーカをON/OFFします。

書式
解説
文例

CALL NETSTAT

機能

 NCUのハードウェアの状態を返します。

書式
解説
文例

CALL NETSTOP

機能

 電話回線の着呼があったとき、またはDTMFデータが来た時の割り込みを保留します。

書式
解説
文例

LOAD

機能

 BASICプログラムを通信ポートからメモリにロードします。

書式

 LOAD "COM[デバイス番号]:"[,R]

解説

 LOAD実行前のプログラムを消去し、開いているファイルを閉じてから、アスキー形式のBASICプログラムをロードします。EOFコード(1AH)を受信するとロードを終了します。Rオプションを指定するとロード終了後プログラムが実行されます。この場合、開いているファイルは閉じません。
 プログラム転送に際しエラーコレクションは行いません。

文例

 LOAD "COM0:",R
 MSX BASICのプログラムを通信用ポートからメモリにロードし、実行します。

MERGE

機能

 プログラムを通信ポートからロードし、メモリ上のプログラムとマージ(混合)します。

書式

 MERGE "COM[デバイス番号]:"

解説

 アスキー形式のBASICプログラムを通信用デバイスからロードします。この時メモリ上にすでにあるプログラムはそのまま残り、MERGE文でロードされたプログラムと合併します。ただし、同じ行番号の場合はMERGEでロードされた方の行が残り、前のプログラムの行は消えます。
 プログラム転送に際しエラーコレクションは行いません。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。

文例

 MERGE"COM0:"

RUN

機能

 BASICプログラムを通信ポートからメモリにロードし実行します。

書式

 RUN "COM[デバイス番号]:"[,R]

解説

 アスキー形式のBASICプログラムをロードし実行します。RUN文実行前のプログラムを消去し、全てのファイルを閉じます。EOFコード(1AH)を受信するとプログラムのロードを終了し実行に入ります。Rオプションを指定すると、全てのファイルは開いたままになります。
 プログラム転送に際しエラーコレクションは行いません。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。

文例

 RUN "COM0:",R
 MSX BASICのプログラムをロードします。ファイルは閉じたままにします。

SAVE

機能

 BASICプログラムを通信ポートに送ります

書式

 SAVE ”COM[デバイス番号:]"

解説

 通信用ポートにアスキー形式のBASICプログラムを送出します。
 プログラム転送に際しエラーコレクションは行いません。

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。

文例

 デバイス番号0にBASICのプログラムを送ります。
 SAVE ”COM0:”

 3.ステートメント

CLOSE

機能

 OPEN文で開かれたファイルを閉じます。OPEN文で開かれたファイルからデータを順に読み取り、変数に代入します。

書式

 CLOSE[[#]ファイル番号][,[#]ファイル番号]...

解説

 OPEN文で開かれたファイルの番号を指定して下さい。ファイルを閉じると、そのファイル番号が新たにファイルを開くときに使うことができます。
 指定したファイルが送信用に開かれたファイルであった場合は、相手機器にEOFコード(1AH)が送信されます。
 RUN、END、CLEAR、NEWなどのコマンドを実行した場合も、ファイルは閉じられます。

 ファイル番号
 対象となるファイル番号を1〜(MAXFILES文で指定された数)の整数値で指定します。省略時は全てのファイルを閉じます。指定には、整数型定数、変数、配列変数、式が使えます。

 キャリア信号
 CLOSE文を実行すると回線に出ているキャリア信号はストップします。

文例

 CLOSE # 1,2,3
 ファイル番号1,2,3のファイルを閉じます。
 CLOSE
 すべてのファイルを閉じます。

INPUT #

機能

 OPEN文で開かれたファイルからデータを順に読み取り、変数に代入します。

書式

 INPUT#ファイル番号,変数[,変数]...

解説

 受信バッファ用ファイルからデータを読み取り、変数に代入します。ファイル番号は、OPEN文で受信バッファとして開かれたファイルを指定します。データが数値型の場合、データの前に描かれたスペース、リターンコード、ラインフィードコードは無視されます。データが文字型の場合、最初に読み取られた文字からスペース、カンマ、リターンコード、ラインフィードコードの前までを一つのデータとして読み取ります。""で囲まれている場合は、""の中の文字だけをデータとして読み取ります。変数を指定する場合は、読み取るデータに合ったタイプの変数を指定します。

 ファイル番号
 対象となるファイル番号を1〜(MAXFILES文で指定された数)の整数値で指定します。省略時は全てのファイルを閉じます。指定には、整数型定数、変数、配列変数、式が使えます。

 変数
 数値型または文字型変数、それらの配列変数

文例
10 OPEN"COM0:"FOR INPUT AS #1
20 IF EOF(1) THEN GOTO 60
30 INPUT #1,A$:PRINT A$
40 GOTO 20
50 CLOSE #1

 ファイル番号を1として、受信バッファ用のファイルを開きます。
 最後のデータが読み取られるまで文字型データを読み取り、文字型変数A$に代入して表示し、ファイルを閉じます。

LINE INPUT #

機能

 254文字までの文字列をファイルから読み取り、文字型変数に代入します。

書式

 INPUT#ファイル番号,変数[,変数]...

解説

 受信バッファ用ファイルから文字型データを読み取りますが、INPUT#文と異なり、スペース、カンマ、ラインフィードコードを文字列データとして変数に代入します。データの区切とみなされるのはリターンコードだけです。ファイル番号は、OPEN文で受信バッファとして開かれたファイルを指定します。

 ファイル番号
 対象となるファイル番号を1〜(MAXFILES文で指定された数)の整数値で指定します。省略時は全てのファイルを閉じます。指定には、整数型定数、変数、配列変数、式が使えます。

 変数
 文字型変数、配列変数です。

文例
10 OPEN"COM0:"FOR INPUT AS #1
20 IF EOF(1) THEN GOTO 60
30 LINE INPUT #1,A$
40 PRINT A$
50 GOTO 20
60 CLOSE #1

 ファイル番号を1として、受信バッファ用のファイルを開きます。
 最後のデータが読み取られるまで文字型データを読み取り、文字型変数A$に代入して表示し、ファイルを閉じます。

OPEN

機能

 通信用ファイルを開きます。

書式

 OPEN "COM[デバイス番号]:"[FORモード] AS [#]ファイル番号

解説

 通信の入出力に必要な送信、受信バッファの領域をファイルとして確保します。OPEN文は次のコマンドや関数を使用する前に必ず実行してください。

 PRINT #、PRINT # USING、LINE INPUT #、INPUT$

 デバイス番号
 設定の対象となるカートリッジを0(*)〜9の整数値で指定します。指定には、文字型変数、変数、配列変数、式が使えます。

 モード
 オープン時のモードを指定します。

 ファイル番号
 OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

文例

 OPEN "COM0:"For OUTPUT AS #1
 送信バッファとしてファイル1を開きます。

PRINT #

機能

 OPEN文で開かれたファイルにデータを書き込みます。

書式

 PRINT #ファイル番号,[式][セパレータ][式]

解説

 式で指定したデータを送信バッファ用のファイルに書き込みます。

 ファイル番号
 OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 
 文字型、数値型の変数、変数、配列変数、式が使えます。

 セパレータ
 また、正の数値データを書き込むと、データの区切りを示すスペースがデータの間に挿入されます。

 末尾にセパレータを描かないと、データ送信後CRコード(0DH)とLFコード(0AH)が続いて書き込まれます。

文例
10 OPEN"COM0:"FOR INPUT AS #1
20 A$="ABC":B$="DEF"
30 PRINT #1,A$,B$
40 PRINT #1,A$;B$
50 PRINT #1,+50,-50
60 CLOSE #1

 送信バッファのファイル1に次の形式で順にデータを書き込みます。

PRINT # USING

機能

 OPEN文で開かれたファイルに指定した書式でデータを書き込みます。

書式

 PRINT # ファイル番号,USING 書式記号:式[,式]...

解説

 式の値が、書式記号で指定した形式で書き込まれます。

 ファイル番号
 OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 
 文字型、整数型定数、変数、配列変数、式が使えます。

 書式記号

記号表現形式と実行例
!最初の1文字を出力します。
& &n+2文字を出力します。データがn+2文字より少ない場合は、残りの文字数だけスペースを挿入します。
@文字列全部を出力します。
#送信したい数字の桁数だけ「#」を描きます。小数点は「.」です。
+数値データの前または後ろに、正数ならば「+」を、負数ならば「-」を付けます。
-負の数値データの後ろに「-」を付けます。
**数値データのスペースを「*」で埋めます。書式中の「*」もひとつで1桁に数えられます。
\\数値データの前に「\」を付けます。書式中の「\」もひとつで1桁に数えられます。
**\数値データの直前に「\」を付け、それより前のスペースを「*」で埋めます。。
,小数点の前のいずれかの個所に「,」を付けると、小数点から左に3桁ごとにカンマを入れて出力します。
^^^^数値データを浮動小数点で出力します。「^^^^」は指数部用のスペースに対応します。

 4.関数

EOF

機能

 ファイルの最後のデータが読み取られたら-1、それ以外なら0を返します。

書式

 EOF(ファイル番号)

解説

 OPEN文で受信バッファとして開かれたファイルの番号を指定します。
 この分により、受信バッファ内にある最後のデータが読み取られると-1を返します。それ以外なら0を返します。

 ファイル番号
 対象となるファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 返される値
 整数値(-1または0)。

文例

 ファイル1の最後のデータが読み取られたら、そのファイルを閉じます。

INPUT $

機能

 ファイルから指定した数の文字を入力します。

書式

 INPUT $(文字数,[#]ファイル番号)

解説

 指定された数の文字(文字型データ)を受信バッファ用のファイルから入力します。ファイル番号は、OPEN文で受信バッファとして開かれたファイルを指定します。

 文字数
 入力する文字数を1〜255の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 ファイル番号
 対象となるファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 返される値
 文字型です。

文例
10 OPEN"COM0:",FOR INPUT AS #1
20 X$=INPUT$(50,#1)
30 CLOSE

 ファイル番号を1として受信バッファ用ファイルを開き、そのファイルから50文字入力したところで、それを文字変数X$に代入して、ファイルを閉じます。

LOC

機能

 ファイル中の文字数を返します。

書式

 LOC(ファイル番号)

解説

 受信バッファ用ファイルの文字数を返します。

 ファイル番号
 OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 返される値
 0以上128以下の整数が返されます。

LOF

機能

 ファイルの中の空きスペースの大きさを返します。

書式

 LOF(ファイル番号)

解説

 受信バッファ中の空きスペースを文字数で返します。

 ファイル番号
 OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILES文で指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。

 返される値
 0以上128以下の整数が返されます。

 2.6 拡張BIOS

2.6.1 概要

 MSX MODEM拡張BIOSは、MSXシステムのモデム装置のソフトウェアインターフェイスを標準化して、アプリケーションソフトウェアがハードウェアに独立して作成できるようにするのが目的です。
 モデム、ダイアラなどのハードウェアを標準化するのは、次々と新しいものが発表されている現状ではきわめて困難と考えられます。しかし、MSXシステムの特徴であるソフトウェアの互換性を実現するためにBIOSでのインターフェイスを標準化しようとするものです。
 このBIOSインターフェイスを守って作成されたソフトウェアは、たとえハードウェア仕様が異なるシステムでも互換性を持って使用することが可能となります。
 MSX MODEM拡張BIOSは拡張BIOSコールに寄りアプリケーションソフトウェアから自由に利用できます。BIOSの各ルーチンは、MSX MODEM拡張BIOSのジャンプテーブルを経由してインタースロットコールなどにより呼び出されます。
 高速処理を必要とする場合は、あらかじめスロットをイネーブルしておき、直接コールすることもできます。この章では、MSX-RS232C拡張BIOSを使用するのに必要な、拡張BIOSコールの方法と各BIOSの機能について解説します。
 アプリケーションは先ず拡張BIOSコールによりジャンプテーブルのエントリを調べる必要があります。MSX MODEM拡張BIOSのデバイス番号は「8」です。これはRS-232Cデバイスと同じデバイス番号となっており、RS-232C用ソフトウェアとの互換性を保っています。
 以下MSX MODEM拡張BIOSに必要な拡張BIOSコールについて解説します。

2.6.2 拡張BIOSの呼び出し

1.ジャンプテーブルアドレスの取得
 アプリケーションは、まず以下の拡張BIOSコールにより、拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスを調べなければなりません。
 拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。

  1. RETURN情報エリア用のワークエリア(64バイト)を取る
  2. 以下の設定を行い、0FFCAH番地をコールする。
コール手順

D
E
B
HL

 RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。

表7.18 RAMのスロットアドレス

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

戻り値
変更レジスタ

 RETURN情報はアプリケーションが指定した領域に次のように格納されます。

画像ファイルが存在しません。
図7.11 RETURN情報の形式

 MSX MODEMが無いときは、BレジスタとHLレジスタの内容が変わらずに返ってきます。スロットアドレスの表現はMSX共通で以下の通りです。

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

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

2.BIOSジャンプテーブル
 拡張BIOSは以下に示すジャンプテーブルを持っています。アプリケーションソフトウェアは、インタースロットコールなどで各エントリを呼び出すことにより、BIOSの各機能を利用できます。

■DVINFB
 デバイスインフォメーションバイト(DVINFB)はMODEMカートリッジに、各オプションがあるかどうかを示します。


図7.13 DVINFBの形式

 各ビットは1でその機能があることを示し、0でないことを示します。

■DVTYPE
 デバイスタイプバイト()はこの装置がマルチタイプかシングルタイプかを示します。マルチタイプとは複数のMSX MODEMカートリッジを同時にスロットに挿入でき、ここに制御できる装置のことです。
 DVTYPEが0以外であれば、マルチタイプのモデムカートリッジです。


図7.14 DVTYPEの形式

3.拡張BIOSの各機能
 拡張BIOSの各機能はインタースロットコールにより呼び出されます。インタースロットコールの呼び出しアドレスは001CHです。

コール手順

IY 上位8ビットにスロットアドレス
IX コールアドレス

  その他のレジスタは機能により異なります。各項を参照して下さい。