{{include unfinished_page}} ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}←[[7部 オプションの周辺機器]] ,{BSIZE:0|RIGHT}[[2章 MSX MODEM]] → !!1.1 ハードウェア  MSX RS-232Cには、シングルチャンネルタイプとマルチチャンネルタイプの2つの仕様があります。それぞれについて、以下で解説します。 !1.1.1 シングルチャンネルバージョン '''1. 使用するLSl''' ,{t},{BSIZE:0} ,{c},{SIZE:20|BSIZE:0},{SIZE:50|BSIZE:0},{SIZE:300|BSIZE:0} ,,i8251,通信インターフェイス ,,i8253,プログラマブルインターバルタイマ ,,ROM ,システムソフトウェア用(8Kバイト) '''2. ポートアドレス''' '''  表7.1 シングルチャンネルタイプのポートアドレス''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:400|BSIZE:1 0} ,,I/Oアドレス,Read/Write,意味 ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,80H ,R/W ,8251データポート ,,81H ,R/W ,8251コマンド/ステータスポート ,,82H ,R ,CTS、Timer/Counter2、RI、CD用ステータスセンス ,,82H ,W ,割り込みマスクレジスタ ,,83H , ,システム予約 ,,84H ,R/W ,8253カウンタ0 ,,85H ,R/W ,8253カウンタ1 ,,86H ,R/W ,8253カウンタ2 ,,87H ,W ,8253モードレジスタ '''3. 82H番地ビット割り当て''' ,{t},{BSIZE:0} ,{c},{SIZE:20|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:300|BSIZE:0} ,,82H Read,システムステータスの獲得 '''  表7.2 シングルチャンネルタイプのシステムステータス''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:400|BSIZE:1 0} ,,データビット,意味, ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,D7 ,{COLS:2}CTS (Clear To Send) , ,, ,0{CENTER},CTS Asserted ,, ,1{CENTER},CTS Negated ,,D6 ,{COLS:2}タイマ/カウンタ出力2(8253より), ,,D5 ,システム予約, ,,D4 ,システム予約, ,,D3 ,システム予約, ,,D2 ,システム予約, ,,D1 ,{COLS:2}RI (Ring Indicator)*, ,, ,0{CENTER},RI Asserted ,, ,1{CENTER},RI Negated ,,D0 ,{COLS:2}CD (Carrier Detect)*, ,, ,0{CENTER},CD Asserted ,, ,1{CENTER},CD Negated ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:1},{BSIZE:0} ,注 意{CENTER},*印の信号はオプション。どちらか一方をインプリメントする場合、必ずCD信号にする。 ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:0},{SIZE:300|BSIZE:0} ,82H Write,割り込みマスクレジスタ '''  表7.3 シングルチャンネルタイプの割り込みマスクレジスタ''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:400|BSIZE:1 0} ,,データビット,意味, ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,D7 ,システム予約, ,,D6 ,システム予約, ,,D5 ,システム予約, ,,D4 ,システム予約, ,,D3 ,{COLS:2}Timer Interrupt from i8253 channel2*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D2 ,{COLS:2}Sync character detect/Break detect*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D1 ,{COLS:2}Transmit Data Ready (TxReady)*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D0 ,{COLS:2}Receive Data Ready (RxReady), ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:1},{BSIZE:0} ,注 意{CENTER},*印の信号はオプション。最小構成では、割り込み信号はRxReadyのみ。 '''4. 8253を使用した8251へのボーレートクロック発生''' 1.水晶発振器 発信周波数 1.8432MHz '''  表7.4 シングルチャンネルタイプのボーレートとスケールファクタ''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0} ,,ボーレート,スケールファクタと誤差{COLS:3},, ,{c},{SIZE:10|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:100|BSIZE:0},{SIZE:100|BSIZE:0},{SIZE:320|BSIZE:0} ,,50 ,2304, , ,,75 ,1536, , ,,110 ,1047,110.0287,+0.03% ,,150 ,768 , , ,,300 ,384 , , ,,600 ,192 , , ,,1200 ,96 , , ,,1800 ,64 , , ,,2000 ,58 ,1986.2 ,-0.7% ,,2400 ,48 , , ,,3600 ,32 , , ,,4800 ,24 , , ,,7200 ,16 , , ,,9600 ,12 , , ,,19200,6 , , 2.使用するカウンタチャンネル ,{t},{BSIZE:0} ,{c},{SIZE:50|BSIZE:0},{SIZE:50|BSIZE:0},{BSIZE:0} ,,CH0,Rx Baud rate clock ,,CH1,Tx Baud rate clock ,,CH2,Used by Application(Interrupt generated optionally) '''5. DSUB25コネクタのピン配列''' '''  表7.5 DSUB25コネクタのピン配列''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0 1 1},{BSIZE:1 0} ,,ピン番号,信号名,ピン番号,信号名 ,{c},{SIZE:10|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:200|BSIZE:0},{SIZE:80|BSIZE:0 0 0 1},{SIZE:200|BSIZE:0} ,,1 ,Frame Ground ,14, ,,2 ,Transmit Data ,15, ,,3 ,Receive Data ,16, ,,4 ,Request To Send ,17, ,,5 ,Clear To Send ,18, ,,6 ,Data Set Ready ,19, ,,7 ,Signal Ground ,20,Data Terminal Ready ,,8 ,Carrier Detect ,21, ,,9 , ,22,RING Indicator ,,10, ,23, ,,11, ,24, ,,12, ,25, ,,13, , , !1.1.2 マルチチャンネルバージョン '''1. 使用するLSl''' ,{t},{BSIZE:0} ,{c},{SIZE:20|BSIZE:0},{SIZE:50|BSIZE:0},{SIZE:300|BSIZE:0} ,,i8251,通信インターフェイス ,,i8253,プログラマブルインターバルタイマ ,,ROM ,システムソフトウェア用(8Kバイト) ,,RAM ,受信バッファ、ワークエリア用(2Kバイト) '''2. ROMアドレス'''  RS-232Cのシステムソフトウェアは4000H〜5FFFHに配置します。ROMは以下のモジュールを含みます。 + RS-232Cドライバ + RS-232C拡張BASIC + RS-232C拡張BIOS  マルチチャンネルバージョンでサポートしているチャンネル数は1つのカートリッジにつき、最大4チャンネル(1台のシステムにつき、最大4チャンネル)です。 {{svg 図7.1.svg}} '''図7.1 マルチチャンネルRS-232Cカートリッジの実装例''' '''3.RAMアドレス'''  RAMは6000H〜67FFHに配置します。また、同じRAMがA000H〜A7FFHにも見えるようにイメージを出します。したがって、6000Hに1を書き込むと、A000Hも1になります。システムソフトウェアから両方のアドレスのRAMにアクセス出来るように回路を設計しなければなりません。これは、RS-232Cカートリッジの実行速度をなるべく高速にするためです。  RAMは以下の目的で使われます。 + 1チャンネルにつき、128バイトのキャラクタとそれぞれのキャラクタについてのエラー情報128バイト、合計256バイトの受信バッファ + フラグと変数の保存 + 通信パラメータの保存 '''4. ポートアドレス'''  マルチチャンネルRS-232Cをサポートするためには、アドレスの衝突を防ぐために全てのポートはメモリ上に置かなければなりません。しかし、シングルチャンネルRS-232CのI/Oポートを直接アクセスしているアプリケーションソフトウェアを救済するために、最初の1チャンネルはI/Oポートに接続して下さい。また、この仕様については、システムソフトウェアでコントロールが可能でなければなりません。 '''  表7.6 マルチチャンネルタイプのメモリアドレス''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:300|BSIZE:1 0} ,,メモリアドレス,I/Oアドレス,Read/Write,意味 ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,BFF8H,80H ,R/W ,8251データポート ,,BFF9H,81H ,R/W ,8251コマンド/ステータスポート ,,BFFAH,82H ,R ,CTS、Timer/Counter2、RI、CD用ステータスセンス ,,BFFAH,82H ,W ,割り込みマスクレジスタ ,,BFFBH,83H , ,システム予約 ,,BFFCH,84H ,R/W ,8253カウンタ0 ,,BFFDH,85H ,R/W ,8253カウンタ1 ,,BFFEH,86H ,R/W ,8253カウンタ2 ,,BFFFH,87H ,W ,8253モードレジスタ これはチャンネル0のメモリアドレスです。各チャンネルの最下位アドレスは以下の通りです。 ,{t},{BSIZE:0} ,{c},{SIZE:20|BSIZE:0},{SIZE:100|BSIZE:0},{SIZE:100|BSIZE:0} ,,■チャンネル1,BFF0H ,,■チャンネル2,BFE8H ,,■チャンネル3,BFE0H チャンネルは連続し、0から始まらなければなりません。 '''  表7.7 チャンネル配置の例''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0 1 1},{BSIZE:1 0} ,,良い例,,悪い例 ,{c},{SIZE:10|BSIZE:0},{SIZE:200|BSIZE:0},{SIZE:10|BSIZE:0 0 0 1},{SIZE:200|BSIZE:0} ,,チャンネル1のみ ,,チャンネル0と2 ,,チャンネル0と1 ,,チャンネル0と3 ,,チャンネル0、1、2 ,,チャンネル1のみ ,,チャンネル0、1、2、3 ,,チャンネル1と2 ,, ,,チャンネル1、2、3 ,, ,,チャンネル3のみ ,, ,,など  チャンネル0は特別なチャンネルで、I/Oポートのイネーブルビット(BFFAHのビット4)を持っています。そのビットが1の時、チャンネル0はI/Oポートを通してアクセスできます。これはシングルチャンネルのRS-232Cインターフェイスとの互換性を保つためです。  システムソフトウェアはまず、I/OにRS-232Cインターフェイスが接続されているかどうかを調べます。接続されていなければ、BFFAHのビット4に1をセットし、チャンネル0をI/Oに接続します。これにより、I/Oポートを直接アクセスしているアプリケーションソフトウェアでもマルチチャンネルのRS-232Cで動作可能になります。  I/Oポートの82Hは、ビット4以外はBFFAHと同じです。アプリケーションが誤ってビットを反転し、RS-232Cがアクセス不可能にならないよう、このビットはI/Oポートからはアクセスできません。  メモリのBFFBH(I/Oの83H)番地は、システム用に予約されています。 '''5. アドレスマップ''' {{svg 図7.2.svg}} '''図7.2 アドレスマップ''' '''6. BFFAH(メモリ)、82H(I/O)番地ビット割り当て''' ,{t},{BSIZE:0} ,{c},{SIZE:20|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:300|BSIZE:0} ,,82H Read,システムステータスの獲得 '''  表7.8 マルチチャンネルタイプのシステムステータス''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:400|BSIZE:1 0} ,,データビット,意味, ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,D7 ,{COLS:2}CTS (Clear To Send) , ,, ,0{CENTER},CTS Asserted ,, ,1{CENTER},CTS Negated ,,D6 ,{COLS:2}タイマ/カウンタ出力2(8253より), ,,D5 ,システム予約, ,,D4 ,システム予約, ,,D3 ,システム予約, ,,D2 ,システム予約, ,,D1 ,{COLS:2}RI (Ring Indicator)*, ,, ,0{CENTER},RI Asserted ,, ,1{CENTER},RI Negated ,,D0 ,{COLS:2}CD (Carrier Detect)*, ,, ,0{CENTER},CD Asserted ,, ,1{CENTER},CD Negated ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:1},{BSIZE:0} ,注 意{CENTER},*印の信号はオプション。どちらか一方をインプリメントする場合、必ずCD信号にする。 ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:0},{SIZE:300|BSIZE:0} ,82H Write,割り込みマスクレジスタ '''  表7.9 マルチチャンネルタイプの割り込みマスクレジスタ''' ,{t},{BSIZE:2 0} ,{c},{SIZE:10|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:100|BSIZE:1 0},{SIZE:400|BSIZE:1 0} ,,データビット,意味, ,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0} ,,D7 ,システム予約(必ず1), ,,D6 ,システム予約(必ず1), ,,D5 ,システム予約(必ず1), ,,D4 ,{COLS:2}チャンネル0のI/Oポートのアクセス(BFFAHのみ), ,, ,{CENTER}1,I/Oポートの接続を許可 ,, ,{CENTER}0,I/Oポートの接続を禁止(初期値) ,,D3 ,{COLS:2}Timer Interrupt from i8253 channel2*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D2 ,{COLS:2}Sync character detect/Break detect*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D1 ,{COLS:2}Transmit Data Ready (TxReady)*, ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,,D0 ,{COLS:2}Receive Data Ready (RxReady), ,, ,{CENTER}1,割り込み不許可(初期値) ,, ,{CENTER}0,割り込み許可 ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:1},{BSIZE:0} ,注 意{CENTER},*印の信号はオプション。最小構成では、割り込み信号はRxReadyのみ。 '''7. 8253を使用した8251へのボーレートクロック発生''' 1.水晶発振器 発信周波数 1.8432MHz '''  表7.10 マルチチャンネルタイプのボーレートとスケールファクタ''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0} ,,ボーレート,スケールファクタと誤差{COLS:3},, ,{c},{SIZE:10|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:100|BSIZE:0},{SIZE:100|BSIZE:0},{SIZE:320|BSIZE:0} ,,50 ,2304, , ,,75 ,1536, , ,,110 ,1047,110.0287,+0.03% ,,150 ,768 , , ,,300 ,384 , , ,,600 ,192 , , ,,1200 ,96 , , ,,1800 ,64 , , ,,2000 ,58 ,1986.2 ,-0.7% ,,2400 ,48 , , ,,3600 ,32 , , ,,4800 ,24 , , ,,7200 ,16 , , ,,9600 ,12 , , ,,19200,6 , , 2.使用するカウンタチャンネル ,{t},{BSIZE:0} ,{c},{SIZE:50|BSIZE:0},{SIZE:50|BSIZE:0},{BSIZE:0} ,,CH0,Rx Baud rate clock ,,CH1,Tx Baud rate clock ,,CH2,Used by Application(Interrupt generated optionally) '''8. DSUB25コネクタのピン配列''' '''  表7.11 DSUB25コネクタのピン配列''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0 1 1},{BSIZE:1 0} ,,ピン番号,信号名,ピン番号,信号名 ,{c},{SIZE:10|BSIZE:0},{SIZE:80|BSIZE:0},{SIZE:200|BSIZE:0},{SIZE:80|BSIZE:0 0 0 1},{SIZE:200|BSIZE:0} ,,1 ,Frame Ground ,14, ,,2 ,Transmit Data ,15, ,,3 ,Receive Data ,16, ,,4 ,Request To Send ,17, ,,5 ,Clear To Send ,18, ,,6 ,Data Set Ready ,19, ,,7 ,Signal Ground ,20,Data Terminal Ready ,,8 ,Carrier Detect ,21, ,,9 , ,22,RING Indicator ,,10, ,23, ,,11, ,24, ,,12, ,25, ,,13, , , !!1.2 拡張BASIC !1.2.1 概要  MS RS-232Cには、各機能を簡単に使用できるように、MSX RS-232C拡張BASICが用意されています。コマンド、ステートメント、関数はMSX-BASIC、MSX Disk BASICとおなじですが、書式や指定方法の違いにより、RS-232C通信が行えるように機能が拡張されています。  使い方は、CALL COMINIのように拡張ステートメントの形式です。CALLは_(アンダーバー)で代用できます。  デバイス番号は、スロット番号の小さいスロットにさしこまれている通信用カートリッジの順に、0から割り当てられます。モデムカートリッジなど、MSX RS-232C以外の通信用カートリッジといっしょに使用された場合にも、同様にスロット順に0から割り当てられます。  通信用カートリッジには、RS-232Cインターフェイス、MODEMカートリッジ、「MSX-SERIAL232」などがあります。 !1.2.2 この章の表記法 {{svg 図P100.svg}} !1.2.3 拡張BASICコマンド一覧 '''1.拡張ステートメント(CALL文と共に使用します)''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE: 1 0} ,,コマンド名,機能,ページ ,{c},{SIZE:10|BSIZE:0},{SIZE:150|BSIZE:0},{SIZE:500|BSIZE:0},{SIZE:80|BSIZE:0} ,,COMBREAK ,ブレーク信号を送信します ,103 ,,COMDTR ,DTR(ER)信号をON/OFFします ,104 ,,COM GOSUB,RS-232Cからの割り込み処理サブルーチンの開始行を指定します,104 ,,COMHELP ,COMINIのパラメータ指定方法をヘルプメッセージとして出力します,105 ,,COMINI ,通信機能の初期設定をします,106 ,,COMOFF ,RS-232Cからの割り込みを禁止します,109 ,,COMON ,RS-232Cからの割り込みを許可します,110 ,,COMSTAT ,RS-232Cのステータスを求めます,111 ,,COMSOP ,RS-232Cからの割り込みを保留します,113 ,,COMTERM ,ターミナルモードにします,113 '''2.コマンド''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE: 1 0} ,,コマンド名,機能,ページ ,{c},{SIZE:10|BSIZE:0},{SIZE:150|BSIZE:0},{SIZE:500|BSIZE:0},{SIZE:80|BSIZE:0} ,,LOAD ,プログラムを受信します,117 ,,MERGE,プログラムを受信してメモリ上のプログラムとマージします,117 ,,RUN ,プログラムを受信した後に実行を開始します,118 ,,SAVE ,プログラムを送信します,119 '''3.ステートメント''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0} ,,コマンド名,機能,ページ ,{c},{SIZE:10|BSIZE:0},{SIZE:150|BSIZE:0},{SIZE:500|BSIZE:0},{SIZE:80|BSIZE:0} ,,CLOSE ,RS-232C用ファイルをクローズします,120 ,,INPUT # ,数値や文字を入力して変数に代入します,120 ,,LINE INPUT #,254文字までの文字を受信して文字型変数に代入します,121 ,,OPEN ,RS-232C用ファイルをオープンします,122 ,,PRINT # ,数値や文字を送信します,123 ,,PRINT # USING,書式付きPRINT #です,125 '''4.関数''' ,{t},{BSIZE:2 0} ,{c},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0} ,,コマンド名,機能,ページ ,{c},{SIZE:10|BSIZE:0},{SIZE:150|BSIZE:0},{SIZE:500|BSIZE:0},{SIZE:80|BSIZE:0} ,,EOF ,EOFコード(&H1A)が受信されたかどうかを求めます,127 ,,INPUT$ ,指定した数の文字を入力します,127 ,,LOC ,受信バッファ内の文字数を獲得します,128 ,,LOF ,通信用バッファの空き容量を獲得します,129 ,{t},{BSIZE:0} ,{c},{SIZE:80|BSIZE:1},{BSIZE:0} ,注 意{CENTER},{ROWS:2|BSIZE:0}COMON、COMOFF、COMSTOPの説明にある、RS-232Cからの割り込みとは、BASICのプログラム実行に対する割り込みです。RS-232Cポート(ハードウェア)から発生する実際の割り込みではありません。 !1.2.4 拡張BASICの解説 !CALL COMBREAK ,機能{SIZE:100|CENTER}  ブレーク信号を送信します。 ,書式{SIZE:100|CENTER}  CALL COMBREAK[("デバイス番号:"],式)] ,解説{SIZE:100|CENTER}  SD(送信データ)を強制的にブレーク状態にします。ブレーク状態とは回線が切断状態になることです。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはコロン(:)まで省略します。  '''式'''  数値定数、変数、配列変数、式で指定します。指定できる範囲は3から32767までの値です。式の値は次のように計算します。  省略した場合は、10になります。 ,文例{SIZE:100|CENTER}  CALL COMBREAK(,480)  もしくは  CALL COMBREAK("0:",480)  CALL COMINIにおいて以下のように設定した場合にデバイス番号0に対して、ブレーク信号を500m秒送信します。 ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,キャラクタ長,8ビット ,ストップビット長,1ビット ,送信速度,9600bps !CALL COMDTR !CALL COM GOSUB ,機能{SIZE:100|CENTER}  RS-232Cからの割り込み処理サブルーチンの開始行を指定します。 ,書式{SIZE:100|CENTER}  CALL COM(["デバイス番号:"],GOSUB 行番号) ,解説{SIZE:100|CENTER}  RS-232Cから割り込みがかかると、指定されたサブルーチンが実行されます。  CALL COMON文を使って割り込みを許可してからデータが受信されると、実行中の文の実行が終わってからサブルーチンが実行されます。サブルーチンはRETURN文で終了します。サブルーチンの実行終了後は、割り込みがかかった時点で、実行していたステートメントの次のステートメントに実行が戻ります。  割り込み処理サブルーチンの実行中は、自動的にCOMSTOPとなり、COMOFFしないかぎり、RETURN文によってCOMON状態になります。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはコロン(:)まで省略します。  ''行番号'''  0から65529までの整数型定数で指定します。 ,文例{SIZE:100|CENTER}  CALL COM(, GOSUB 10000)  もしくは  CALL COM("0:", GOSUB 10000)  デバイス番号0から割り込みがかかると行番号10000にGOSUBします。 !CALL COMHELP !CALL COMINI ,機能{SIZE:100|CENTER}  通信機能の初期設定をします。 ,書式{SIZE:100|CENTER}  CALL COMINI[("[デバイス番号:][デバイス番号:][キャラクタ長[パリティ[ストップビット長[XON/XOFF制御[ダミー[受信LF[送信LF[SI/SO制御]]]]]]]]")[,[受信速度][,[送信速度],[タイムアウト]]]])] ,解説{SIZE:100|CENTER}  通信機能の初期設定をします。指定する文字は大文字でも小文字でもかまいません。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9までの整数値を指定します。省略するときはコロン(:)まで省略します。  '''キャラクタ長'''  接続する機種に合わせて送信する1キャラクタのビット数を指定します。 ,5,5ビット ,6,6ビット ,7,7ビット ,8(*),8ビット  '''パリティ'''  パリティチェックの方法を指定します。 ,E,偶数パリティ ,O,奇数パリティ ,I,受信時にパリティを無視する(キャラクタ長が5、6、7ビットの時に有効)。送信時にはパリティビットを0にする。 ,N(*),パリティを使用しない  '''ストップビット長'''  ストップビットのビット数を指定します。 ,1(*),1ビット ,2,1.5ビット ,3,2ビット  '''XON/XOFF制御'''  XON/XOFFによるフロー制御を行うかどうかを指定します。 ,X(*),XON/OFF制御を行う ,N,XON/OFF制御を行わない ,,XONコード=&H11、XOFFコード=&H13  '''RS/CS制御'''  受信バッファの空き領域が少なくなったときに、RSをOFFして相手側からの送信を中断させ、バッファが空くと、RSをONして送信を再開させます。CSがOFFだと、相手への送信を中断して、CSがONになると送信を再開します。 ,H(*),RS/CS制御を行う ,N,RS/CS制御を行わない  '''受信LF挿入'''  CR(0DH)コードを受信したときに、CRコードとLF(0AH)コードに変換する制御です。 ,A,CRコードとLFコードに変換する ,N(*),CRコードとLFコードに変換しない  '''送信LF削除'''  CR(0DH)コードの次にLF(0AH)コードを続けて送信するとき、LFコードを削除して、CRコードのみを送信する制御です。 ,A,LFコードを削除する ,N(*),LFコードを削除しない  '''SI/SO制御'''  キャラクタ長が7ビットのときに、0A1Hコードから0FEHコードを送受信するときの制御を指定します。SI(0EH)コードによりG0集合を呼び出し、SO(0FH)コードによりG1集合を呼び出します。*1  G0集合とは21Hコードから7EHコードまでの集合を、G1集合とは0A1Hコードから0FEHコードまでの集合を指します。 ,S,SI/SO制御を行う ,N(*),SI/SO制御を行わない  '''受信速度'''  データ受信速度を設定します。単位はビット/秒です。  50、75、110、300、600、1200、1800、2000、2400、3600、4800、7200、9600、19200  '''送信速度'''  データ送信速度を設定します。指定できる速度および指定方法はデータ受信速度と同じです。ただし、送信速度と送信タイムアウトをカンマ(,)まで含めて省略すると、送信速度は受信速度と同じになります。  '''送信タイムアウト'''  データを送信するときに、   XOFFコードを受信している   CSがOFFのためデータが送信できない  などの場合の待ち時間を指定します。単位は約1秒です。タイムアウトした場合には送信を注視して、   Device I/O error  というエラーメッセージを表示します。両略した場合や、0を指定した場合はタイムアウトしません。指定できるのは、0〜25の整数値です。 *1 SI/SO制御を行うときは&H80〜&H9Fのコードは送信しないで下さい。コントロールコード(&H00〜&H1F)に変換されて送信されるため、正常な更新が行われなくなる場合があります。 ,文例{SIZE:100|CENTER}  CALL COMINI("0:8N1XHNNN",9600,,3)  この例は、RS-232Cを以下のように設定します。 ,デバイス番号,0 ,キャラクタ長,8ビット ,パリティ,N ,ストップビット長,1ビット ,XON/OFF制御,X ,RS/CS制御,H ,受信LF挿入,N ,送信LF削除,N ,SI/SO制御,N ,受信速度,9600bps ,送信速度,9600bps ,送信タイムアウト,3秒  CALL COMINI("7E3NNAAS")  この例は、RS-232Cを以下のように設定します。 ,デバイス番号,0 ,キャラクタ長,7ビット ,パリティ,E ,ストップビット長,2ビット ,XON/OFF制御,N ,RS/CS制御,N ,受信LF挿入,A ,送信LF削除,A ,SI/SO制御,S ,受信速度,1200bps ,送信速度,1200bps ,送信タイムアウト,なし !CALL COMOFF ,機能{SIZE:100|CENTER}  RS-232からの割り込みを禁止します。 ,書式{SIZE:100|CENTER}  CALL COMOFF[("デバイス番号:")] ,解説{SIZE:100|CENTER}  CALL COMOFF文を実行後、RS-232Cにデータが来ても、割り込みは発生しません。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはカッコごと省略します。 ,文例{SIZE:100|CENTER}  CALL COMOFF  もしくは  CALL COMOFF("0:")  デバイス番号0をCOMOFFします。 !CALL COMON ,機能{SIZE:100|CENTER}  RS-232からの割り込みを許可します。 ,書式{SIZE:100|CENTER}  CALL COMON[("デバイス番号:")] ,解説{SIZE:100|CENTER}  CALL COMON文を実行後、RS-232Cにデータが来ると、COM GOSUB文で指定してある行番号が実行されます。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはカッコごと省略します。 ,文例{SIZE:100|CENTER}  CALL COMON  もしくは  CALL COMON("0:")  デバイス番号0をCOMONします。 !CALL COMSTAT ,機能{SIZE:100|CENTER}  RS-232Cのステータスを求めます。 ,書式{SIZE:100|CENTER}  CALL COMSTAT(["デバイス番号:"],数値変数) ,解説{SIZE:100|CENTER}  RS-232Cのステータスを数値変数に代入します。  ステータスは数値変数値の下位16ビットが1か0かで示します。 ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:80},{BSIZE:0} ,ビット0,キャリア信号の検出 ,(LSB),0 キャリアを検出していない。 ,,1 キャリアを検出。 ,ビット1,被呼表示(リングインジケータ)の検出 ,,0 被呼表示を検出していない。 ,,1 被呼表示を検出。 ,ビット2,ブレーク信号の検出 ,,0 ブレーク信号を検出していない。 ,,1 ブレーク信号を検出。 ,ビット3,データセットレディ ,,0 DR(DSR)信号を検出していない。 ,,1 DR(DSR)信号を検出。 ,ビット4,未使用(常に0) ,ビット5,未使用(常に0) ,ビット6,タイマ/カウンタ出力2 ,,0 タイマ/カウンタ出力2が偽である。 ,,1 タイマ/カウンタ出力2が真である。 ,ビット7,CS信号検出 ,,0 CS(CTS)信号を検出していない。 ,,1 CS(CTS)信号を検出。 ,ビット8,未使用(常に0) ,ビット9,未使用(常に0) ,ビット10,CTRL+STOPキー検出 ,,0 押されていなかった ,,1 押されていた ,ビット11,パリティエラー ,,0 エラーなし ,,1 エラーあり ,ビット12,オーバーランエラー ,,0 エラーなし ,,1 エラーあり ,ビット13,フレーミングエラー ,,0 エラーなし ,,1 エラーあり ,ビット14,送信タイムアウトエラー ,,0 エラーなし ,,1 エラーあり ,ビット15,バッファオーバフローエラー ,(MSB),0 エラーなし ,,1 エラーあり ,文例{SIZE:100|CENTER}  CALL COMSTAT(,F):PRINT BIN$(F)  もしくは  CALL COMSTAT("0:",F):PRINT BIN$(F)  デバイス番号0のステータスを数値変数Fに代入して、画面に2進数表示をします。 !CALL COMSTOP !CALL COMTERM !LOAD !MERGE !RUN !SAVE !CLOSE !INPUT# !LINE INPUT# !OPEN !PRINT# !PRINT # USING !EOF !INPUT$ !LOC !LOF !!1.3 拡張BIOS !1.3.1 概要  MSX RS-232Cでは、アプリケーションソフトウェア用のサービスルーチンとして、拡張BIOSコールが用意されています。拡張BIOSコールにより、アプリケーションソフトウェアはそのスロットアドレスやアドレスなどの位置を調べ、インタースロットコール等により、ジャンプテーブルを経由して呼び出します。  高速処理を必要とする場合は、あらかじめスロットをイネーブルしておき、直接コールすることもできます。この章では、MSX RS-232C拡張BIOSを使用するのに必要な、拡張BIOSコールの方法と各BIOSの機能について解説します。 !1.3.2 拡張BIOSの呼び出し 1.ジャンプテーブルアドレスの取得  アプリケーションは、まず以下の拡張BIOSコールにより、MSX RS-232C拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスを調べなければなりません。  拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。 +RETURN情報エリア用のワークエリアをとる +以下の設定を行い、FFCAH番地をコールする  RETURN情報はアプリケーションが指定した領域に次のように格納されます。 {{svg 図7.3P131.svg}} '''図7.3 RETURN情報の形式'''  RS-232Cが無いときは、BレジスタとHLレジスタの内容が変わらずに返ってきます。  スロットアドレスの表現はMSX共通で以下の通りです。 {{svg 図7.4P131.svg}} '''図7.4 スロットアドレスの形式'''  拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。 2.BIOSジャンプテーブル  MSX RS-232C拡張BIOSは以下に示すジャンプテーブルを持っています。アプリケーションソフトウェアはインタースロットコール等で各エントリを呼び出すことにより、BIOSの各機能を利用できます。 DVINFB  DVINFBは以下の構成でそのカートリッジの仕様を表します。 {{svg 図P132.svg}} '''図7.5 DVINFBの形式'''  各ビットは1でその機能があることを示し、0でないことを示します。 DVTYPE  DVTYPEが0であればシングルチャンネルタイプのRS-232Cカートリッジです。この場合はSETCHNのエントリはありません。  DVTYPEが0以外であればマルチチャンネルタイプのRS-232Cカートリッジです。 3.BIOSの各機能  MSX RS-232C拡張BIOSの各機能はインタースロットコールにより呼び出されます。インタースロットコール(CALSLT)の呼び出しアドレスは001CHです。 ,コール手順 その他のレジスタは機能により異なります。各項を参照してください。 !INIT !OPEN !STAT !GETCHR !SNDCHR !CLOSE !EOF !LOC !LOF !BACKUP !SNDBRK ,機能{SIZE:100|CENTER}  指定した数のブレーク文字を送出します。 ,コール手順{SIZE:100|CENTER} ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,DE,送出するブレーク文字数 ,戻り値{SIZE:100|CENTER} ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,Cフラグ,CTRL+STOPが押されると1にセットされます。 ,変更レジスタ{SIZE:100|CENTER}  AF、DE !DTR ,機能{SIZE:100|CENTER}  DTR(ER)をON/OFFします。 ,コール手順{SIZE:100|CENTER} ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,A,コントロール指定 ,0,DTR(ER)をOFFします。 ,0以外,DTR(ER)をONします。 ,戻り値{SIZE:100|CENTER}  なし ,変更レジスタ{SIZE:100|CENTER}  F !SETCHN ,機能{SIZE:100|CENTER}  マルチチャンネルタイプのRS-232Cカートリッジで、制御の対象とするチャンネルを指定します。 ,コール手順{SIZE:100|CENTER} ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,E,チャンネル番号 ,戻り値{SIZE:100|CENTER} ,{t},{BSIZE:0} ,{c},{BSIZE:0|SIZE:140},{BSIZE:0} ,Cフラグ,チャンネル番号が正しくない場合に1が返されます。 ,変更レジスタ{SIZE:100|CENTER}  AF、BC ,解説{SIZE:100|CENTER}  チャンネル番号はリセット時に0に設定されます。 ,注意{SIZE:100|CENTER}  ここでのチャンネル番号はBASICでのCOM0:などの番号とは異なり、マルチチャンネルRS-232Cカートリッジのポートだけに付けられた番号です。つまりシングルチャンネルタイプのRS-232Cカートリッジがマルチチャンネルタイプのものより小さいスロット番号に遭っても、チャンネル番号は0から始まります。 !!1.4 サンプルプログラム  添付のフロッピーディスクの中に、RS-232C拡張BIOSを使ったサンプルプログラムが入っています。ファイル名は、「TERMINAL.MAC」です。  MSX-DOSからこのプログラムを起動すると、簡単なターミナルモードになります。終了するにはCTRL+STOPを押してください。  このプログラムを作成するにはMSX-DOS TOOLSを使って、次の操作を行います。 A>m80=b:sample No Fatal error(s) A>l80 b:sample,b:sample/n/e MSX-L.80 1.00 01-Apr-85 (c) 1981,1985 Microsoft DATA 0103 0267 < 356> XXXXX Bytes Free [0000 0267 2] A> ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}←[[7部 オプションの周辺機器]] ,{BSIZE:0|RIGHT}[[2章 MSX MODEM]] →