MSX Datapack wiki化計画

1章 MSX RS-232C

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

 1.1 ハードウェア

 MSX RS-232Cには、シングルチャンネルタイプとマルチチャンネルタイプの2つの仕様があります。それぞれについて、以下で解説します。

1.1.1 シングルチャンネルバージョン

1. 使用するLSl

i8251通信インターフェイス
i8253プログラマブルインターバルタイマ
ROM システムソフトウェア用(8Kバイト)

2. ポートアドレス

  表7.1 シングルチャンネルタイプのポートアドレス

I/OアドレスRead/Write意味
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番地ビット割り当て

82H Readシステムステータスの獲得

  表7.2 シングルチャンネルタイプのシステムステータス

データビット意味
D7 CTS (Clear To Send)
0CTS Asserted
1CTS Negated
D6 タイマ/カウンタ出力2(8253より)
D5 システム予約
D4 システム予約
D3 システム予約
D2 システム予約
D1 RI (Ring Indicator)*
0RI Asserted
1RI Negated
D0 CD (Carrier Detect)*
0CD Asserted
1CD Negated

注 意*印の信号はオプション。どちらか一方をインプリメントする場合、必ずCD信号にする。
82H Write割り込みマスクレジスタ

  表7.3 シングルチャンネルタイプの割り込みマスクレジスタ

データビット意味
D7 システム予約
D6 システム予約
D5 システム予約
D4 システム予約
D3 Timer Interrupt from i8253 channel2*
1割り込み不許可(初期値)
0割り込み許可
D2 Sync character detect/Break detect*
1割り込み不許可(初期値)
0割り込み許可
D1 Transmit Data Ready (TxReady)*
1割り込み不許可(初期値)
0割り込み許可
D0 Receive Data Ready (RxReady)
1割り込み不許可(初期値)
0割り込み許可

注 意*印の信号はオプション。最小構成では、割り込み信号はRxReadyのみ。

4. 8253を使用した8251へのボーレートクロック発生

1.水晶発振器 発信周波数 1.8432MHz

  表7.4 シングルチャンネルタイプのボーレートとスケールファクタ

ボーレートスケールファクタと誤差
50 2304
75 1536
110 1047110.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
192006

2.使用するカウンタチャンネル

CH0Rx Baud rate clock
CH1Tx Baud rate clock
CH2Used by Application(Interrupt generated optionally)

5. DSUB25コネクタのピン配列

  表7.5 DSUB25コネクタのピン配列

ピン番号信号名ピン番号信号名
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 20Data Terminal Ready
8 Carrier Detect 21
9 22RING Indicator
1023
1124
1225
13

1.1.2 マルチチャンネルバージョン

1. 使用するLSl

i8251通信インターフェイス
i8253プログラマブルインターバルタイマ
ROM システムソフトウェア用(8Kバイト)
RAM 受信バッファ、ワークエリア用(2Kバイト)

2. ROMアドレス
 RS-232Cのシステムソフトウェアは4000H〜5FFFHに配置します。ROMは以下のモジュールを含みます。

  1. RS-232Cドライバ
  2. RS-232C拡張BASIC
  3. RS-232C拡張BIOS

 マルチチャンネルバージョンでサポートしているチャンネル数は1つのカートリッジにつき、最大4チャンネル(1台のシステムにつき、最大4チャンネル)です。


図7.1 マルチチャンネルRS-232Cカートリッジの実装例

3.RAMアドレス
 RAMは6000H〜67FFHに配置します。また、同じRAMがA000H〜A7FFHにも見えるようにイメージを出します。したがって、6000Hに1を書き込むと、A000Hも1になります。システムソフトウェアから両方のアドレスのRAMにアクセス出来るように回路を設計しなければなりません。これは、RS-232Cカートリッジの実行速度をなるべく高速にするためです。
 RAMは以下の目的で使われます。

  1. 1チャンネルにつき、128バイトのキャラクタとそれぞれのキャラクタについてのエラー情報128バイト、合計256バイトの受信バッファ
  2. フラグと変数の保存
  3. 通信パラメータの保存

4. ポートアドレス
 マルチチャンネルRS-232Cをサポートするためには、アドレスの衝突を防ぐために全てのポートはメモリ上に置かなければなりません。しかし、シングルチャンネルRS-232CのI/Oポートを直接アクセスしているアプリケーションソフトウェアを救済するために、最初の1チャンネルはI/Oポートに接続して下さい。また、この仕様については、システムソフトウェアでコントロールが可能でなければなりません。

  表7.6 マルチチャンネルタイプのメモリアドレス

メモリアドレスI/OアドレスRead/Write意味
BFF8H80H R/W 8251データポート
BFF9H81H R/W 8251コマンド/ステータスポート
BFFAH82H R CTS、Timer/Counter2、RI、CD用ステータスセンス
BFFAH82H W 割り込みマスクレジスタ
BFFBH83H システム予約
BFFCH84H R/W 8253カウンタ0
BFFDH85H R/W 8253カウンタ1
BFFEH86H R/W 8253カウンタ2
BFFFH87H W 8253モードレジスタ

これはチャンネル0のメモリアドレスです。各チャンネルの最下位アドレスは以下の通りです。

■チャンネル1BFF0H
■チャンネル2BFE8H
■チャンネル3BFE0H

チャンネルは連続し、0から始まらなければなりません。

  表7.7 チャンネル配置の例

良い例悪い例
チャンネル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. アドレスマップ


図7.2 アドレスマップ

6. BFFAH(メモリ)、82H(I/O)番地ビット割り当て

82H Readシステムステータスの獲得

  表7.8 マルチチャンネルタイプのシステムステータス

データビット意味
D7 CTS (Clear To Send)
0CTS Asserted
1CTS Negated
D6 タイマ/カウンタ出力2(8253より)
D5 システム予約
D4 システム予約
D3 システム予約
D2 システム予約
D1 RI (Ring Indicator)*
0RI Asserted
1RI Negated
D0 CD (Carrier Detect)*
0CD Asserted
1CD Negated

注 意*印の信号はオプション。どちらか一方をインプリメントする場合、必ずCD信号にする。
82H Write割り込みマスクレジスタ

  表7.9 マルチチャンネルタイプの割り込みマスクレジスタ

データビット意味
D7 システム予約(必ず1)
D6 システム予約(必ず1)
D5 システム予約(必ず1)
D4 チャンネル0のI/Oポートのアクセス(BFFAHのみ)
1I/Oポートの接続を許可
0I/Oポートの接続を禁止(初期値)
D3 Timer Interrupt from i8253 channel2*
1割り込み不許可(初期値)
0割り込み許可
D2 Sync character detect/Break detect*
1割り込み不許可(初期値)
0割り込み許可
D1 Transmit Data Ready (TxReady)*
1割り込み不許可(初期値)
0割り込み許可
D0 Receive Data Ready (RxReady)
1割り込み不許可(初期値)
0割り込み許可

注 意*印の信号はオプション。最小構成では、割り込み信号はRxReadyのみ。

7. 8253を使用した8251へのボーレートクロック発生

1.水晶発振器 発信周波数 1.8432MHz

  表7.10 マルチチャンネルタイプのボーレートとスケールファクタ

ボーレートスケールファクタと誤差
50 2304
75 1536
110 1047110.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
192006

2.使用するカウンタチャンネル

CH0Rx Baud rate clock
CH1Tx Baud rate clock
CH2Used by Application(Interrupt generated optionally)

8. DSUB25コネクタのピン配列

  表7.11 DSUB25コネクタのピン配列

ピン番号信号名ピン番号信号名
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 20Data Terminal Ready
8 Carrier Detect 21
9 22RING Indicator
1023
1124
1225
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 この章の表記法


1.2.3 拡張BASICコマンド一覧

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

コマンド名機能ページ
COMBREAK ブレーク信号を送信します 103
COMDTR DTR(ER)信号をON/OFFします 104
COM GOSUBRS-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.コマンド

コマンド名機能ページ
LOAD プログラムを受信します117
MERGEプログラムを受信してメモリ上のプログラムとマージします117
RUN プログラムを受信した後に実行を開始します118
SAVE プログラムを送信します119

3.ステートメント

コマンド名機能ページ
CLOSE RS-232C用ファイルをクローズします120
INPUT # 数値や文字を入力して変数に代入します120
LINE INPUT #254文字までの文字を受信して文字型変数に代入します121
OPEN RS-232C用ファイルをオープンします122
PRINT # 数値や文字を送信します123
PRINT # USING書式付きPRINT #です125

4.関数

コマンド名機能ページ
EOF EOFコード(&H1A)が受信されたかどうかを求めます127
INPUT$ 指定した数の文字を入力します127
LOC 受信バッファ内の文字数を獲得します128
LOF 通信用バッファの空き容量を獲得します129

注 意COMON、COMOFF、COMSTOPの説明にある、RS-232Cからの割り込みとは、BASICのプログラム実行に対する割り込みです。RS-232Cポート(ハードウェア)から発生する実際の割り込みではありません。

1.2.4 拡張BASICの解説

CALL COMBREAK

機能

 ブレーク信号を送信します。

書式

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

解説

 SD(送信データ)を強制的にブレーク状態にします。ブレーク状態とは回線が切断状態になることです。

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

 
 数値定数、変数、配列変数、式で指定します。指定できる範囲は3から32767までの値です。式の値は次のように計算します。

値の式=送信速度×ブレーク送信時間
1+キャラクタ長+ストップビット長

 省略した場合は、10になります。

文例

 CALL COMBREAK(,480)
 もしくは
 CALL COMBREAK("0:",480)
 CALL COMINIにおいて以下のように設定した場合にデバイス番号0に対して、ブレーク信号を500m秒送信します。

キャラクタ長8ビット
ストップビット長1ビット
送信速度9600bps

CALL COMDTR

機能

 DTR(ER)信号をON/OFFします。

書式

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

解説

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

 
 0と1の値で指定します。

0DTR(ER)をOFF
1DTR(ER)をON
0以外の数値を指定した場合にも、DTR(ER)はONになる

文例

 CALL COMDTR(,0)
 もしくは
 CALL COMDTR("0:",0)
 デバイス番号0のDTR(ER)信号をOFFにします。

CALL COM GOSUB

機能

 RS-232Cからの割り込み処理サブルーチンの開始行を指定します。

書式

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

解説

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

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

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

文例

 CALL COM(, GOSUB 10000)
 もしくは
 CALL COM("0:", GOSUB 10000)
 デバイス番号0から割り込みがかかると行番号10000にGOSUBします。

CALL COMHELP

機能

 COMINIのパラメータの指定方法がヘルプメッセージとして出力します。

書式

 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}>
 <CTS hand-shake {H,N}>
 <auto LF on recieve {A,N}>
 <auto LF on transmit {A,N}>
 <SI/SO {S,N}>
 ,<receive baud rate>
 ,<transmitter baud rate>
 ,<time out count>
 Default:
 CALL COMINI("0:8N1XHNNN"
      ,1200,1200,0)

CALL COMINI

機能

 通信機能の初期設定をします。

書式

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

解説

 通信機能の初期設定をします。指定する文字は大文字でも小文字でもかまいません。

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

 キャラクタ長
 接続する機種に合わせて送信する1キャラクタのビット数を指定します。

55ビット
66ビット
77ビット
8(*)8ビット

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

E偶数パリティ
O奇数パリティ
I受信時にパリティを無視する(キャラクタ長が5、6、7ビットの時に有効)。送信時にはパリティビットを0にする。
N(*)パリティを使用しない

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

1(*)1ビット
21.5ビット
32ビット

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

X(*)XON/OFF制御を行う
NXON/OFF制御を行わない
XONコード=&H11、XOFFコード=&H13

 RS/CS制御
 受信バッファの空き領域が少なくなったときに、RSをOFFして相手側からの送信を中断させ、バッファが空くと、RSをONして送信を再開させます。CSがOFFだと、相手への送信を中断して、CSがONになると送信を再開します。

H(*)RS/CS制御を行う
NRS/CS制御を行わない

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

ACRコードとLFコードに変換する
N(*)CRコードとLFコードに変換しない

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

ALFコードを削除する
N(*)LFコードを削除しない

 SI/SO制御
 キャラクタ長が7ビットのときに、0A1Hコードから0FEHコードを送受信するときの制御を指定します。SI(0EH)コードによりG0集合を呼び出し、SO(0FH)コードによりG1集合を呼び出します。*1
 G0集合とは21Hコードから7EHコードまでの集合を、G1集合とは0A1Hコードから0FEHコードまでの集合を指します。

SSI/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)に変換されて送信されるため、正常な更新が行われなくなる場合があります。
文例

 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

機能

 RS-232からの割り込みを禁止します。

書式

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

解説

 CALL COMOFF文を実行後、RS-232Cにデータが来ても、割り込みは発生しません。

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

文例

 CALL COMOFF
 もしくは
 CALL COMOFF("0:")
 デバイス番号0をCOMOFFします。

CALL COMON

機能

 RS-232からの割り込みを許可します。

書式

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

解説

 CALL COMON文を実行後、RS-232Cにデータが来ると、COM GOSUB文で指定してある行番号が実行されます。

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

文例

 CALL COMON
 もしくは
 CALL COMON("0:")
 デバイス番号0をCOMONします。

CALL COMSTAT

機能

 RS-232Cのステータスを求めます。

書式

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

解説

 RS-232Cのステータスを数値変数に代入します。
 ステータスは数値変数値の下位16ビットが1か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が真である。
ビット7CS信号検出
0 CS(CTS)信号を検出していない。
1 CS(CTS)信号を検出。
ビット8未使用(常に0)
ビット9未使用(常に0)
ビット10CTRL+STOPキー検出
0 押されていなかった
1 押されていた
ビット11パリティエラー
0 エラーなし
1 エラーあり
ビット12オーバーランエラー
0 エラーなし
1 エラーあり
ビット13フレーミングエラー
0 エラーなし
1 エラーあり
ビット14送信タイムアウトエラー
0 エラーなし
1 エラーあり
ビット15バッファオーバフローエラー
(MSB)0 エラーなし
1 エラーあり
文例

 CALL COMSTAT(,F):PRINT BIN$(F)
 もしくは
 CALL COMSTAT("0:",F):PRINT BIN$(F)
 デバイス番号0のステータスを数値変数Fに代入して、画面に2進数表示をします。

CALL COMSTOP

機能

 RS-232Cからの割り込みを保留します。

書式

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

解説

 CALL COMSTOP文を実行後、RS-232Cにデータが来ても、CALL COMONが実行されるまで割り込みは保留されます。

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

文例

 CALL COMSTOP
 もしくは
 CALL COMSTOP("0:")
 デバイス番号0をCOMSTOPします。

CALL COMTERM

機能

 ターミナルモードにします。

書式

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

解説

 コンピュータをターミナルモードにします。ターミナルモードとは、MSXをホストコンピュータの入出力端末として使用するモードです。ターミナルモードでは、MSXはホストコンピュータから受信したデータをディスプレイに表示します。そして、キーボードから入力されたデータを、ホストコンピュータに送信します。

1.ターミナルモードの起動
 1.接続する機器の仕様を確認する
 2.CALL COMINI命令による初期設定を行う
 3.CALL COMTERM命令で内蔵ターミナルソフトを起動する

 RS-232CポートをOPENしている場合には、CLOSEしてからCALL COMTERM命令を実行してください。

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

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

キー機能
SHIFT+F1リテラルモードの切り換え
SHIFT+F2エコーバックの切り換え
SHIFT+F3プリンタエコーバックの切り換え
STOPブレーク信号の送信

 1.リテラルモード
  SHIFT+F1でON、OFFを切り換えます。
  SHIFT+F1を押すと、リテラルモードがONになります。ONの時には、コントロールコード(&H1F以下のコード)はハットマーク(^)とコントロールコードに40Hを足したコードの2文字で画面に表示されます。例えば&H01なら
   ^A
  と表示されます。
  XON・OFF制御を指定しているときは、XONとXOFFコードは表示されません。
  もう一度、SHIFT+F1を押すと、リテラルモードはOFFになります。

 2.ローカルエコーバック
  SHIFT+F2でON、OFFを切り換えます。
  SHIFT+F2を押すと、エコーバックがONになります。
  ONの時には、キー入力した文字を送信すると同時に画面にも表示(エコーバック)します。
  もう一度、SHIFT+F2を押すと、エコーバックはOFFになります。

 3.プリンタエコーバック
  SHIFT+F3でON/OFFを切り換えます。
  SHIFT+F3を押すと、プリンタへのエコーバックがONになります。ONの時には、画面に出力したデータをプリンタにも出力します。
  もう一度、SHIFT+F3を押すと、プリンタへのエコーバックはOFFになります。

 4.ブレーク信号の送信
  STOPキーを押してる間、ブレーク信号が送信されます。ブレーク信号とは、データ信号線(SD)がOFFになる状態です。

 5.ターミナルモードの終了
  CTRL+STOPキーを押すとターミナルモードは終了します。
  ターミナルモードでは、
   F6  リテラルモードのON/OFF
   F7  エコーバックのON/OFF
   F8  プリンタエコーのON/OFF
  となり、その機能の略号が画面に表示されます。そのほかのファンクションキーは、画面に表示されているファンクションキーの内容をそのまま送信します。

注意

  MSXでは、画面表示の際に、DELコードとBS(バックスペース)コードは同じ扱いをします。ホストコンピュータと接続した場合、ホストコンピュータによっては、行の先頭にDELコードを送信するものがあり、画面表示が乱れることがあります。その場合、ホストコンピュータがDELコードを送信しないように設定する必要があります。DELコードの送信を止めることができないホストコンピュータと更新する場合は、ターミナルモードは使用できません。データの交信を行うプログラムを作成して、そこでDELコードの処理をしてください。

3.ターミナルモードの例
 call comini
 Ok
 call comterm
 この例は、RS-232Cを以下のように設定して、内蔵のターミナルソフトを起動する例です。

デバイス番号0
キャラクタビット8ビット
パリティN
ストップビット長1ビット
XON/OFF制御X
RS/CS制御H
受信LF挿入N
送信LF削除N
SI/SO制御H
受信速度1200bps
送信速度1200bps
送信タイムアウト0

 設定の意味は、COMINIの項をご参照下さい。

4.エスケープシーケンス
 RS-232Cの内蔵ターミナルソフトがサポートするエスケープシーケンスは以下の通りです。

カーソル移動

<ESC>Aカーソルを上に移動
<ESC>Bカーソルを下に移動
<ESC>Cカーソルを右に移動
<ESC>Dカーソルを左に移動
<ESC>Hカーソルをホームポジションに移動
<ESC>Y<Y座標+20H><X座標+20H>
カーソルを(X,Y)の位置に移動

編集・削除

<ESC>j画面をクリア
<ESC>l行全体を削除
<ESC>E画面をクリア
<ESC>K行の終わりまで削除
<ESC>J画面の終わりまで削除
<ESC>L1行挿入
<ESC>M1行削除

その他

<ESC>x4カーソルの形を「■」にする
<ESC>x5カーソルを消す
<ESC>y4カーソルの形を「_」にする
<ESC>y5カーソルを表示する

LOAD

機能

 プログラムを受信します。

書式

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

解説

 RS-232CからASCII形式のBASICプログラムをロードします。EOF(&H1A)コードを受信するとロードを終了します。ロードする前のプログラムは消え、Rオプションを指定していなかった場合、開いているファイルは閉じられます。通信誤りが検出された場合、

    Device I/O error

 のエラーメッセージが表示されます。

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

 Rオプション
 ロード終了後に、プログラムが実行されます。開いているファイルは閉じません。

文例

 LOAD "COM:"
 デバイス番号0からASCII形式のBASICプログラムをロードします。

MERGE

機能

 プログラムを受信してメモリ上のプログラムとマージ混合します。

書式

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

解説

 RS-232CからASCII形式のBASICプログラムをロードします。このときロードする前のプログラムは消去されずに、ロードされたプログラムと合併されます。EOF(&H1A)コードを受信すると、ロードを終了します。ロードする前のプログラムと同じ行番号がある場合は、ロードされたプログラムの行が残ります。通信誤りが検出された場合、

    Device I/O error

 のエラーメッセージが表示されます。

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

文例

 MERGE "COM:"
 デバイス番号0からASCII形式のBASICプログラムをロードしてマージします。

RUN

機能

 プログラムを受信した後に実行を開始します。

書式

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

解説

 RS-232CからASCII形式のBASICプログラムをロードして実行します。EOF(&H1A)コードを受信するとロードを終了します。ロードする前のプログラムは消去され、Rオプションを指定していなかった場合、開いているファイルは閉じられます。通信誤りが検出された場合、

    Device I/O error

 のエラーメッセージが表示されます。

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

 Rオプション
 ロード終了後に、プログラムが実行されます。開いているファイルは閉じません。

文例

 RUN "COM:"
 デバイス番号0からASCII形式のBASICプログラムをロードして実行します。

SAVE

機能

 プログラムを送信します。

書式

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

解説

 RS-232CにASCII形式のBASICプログラムを送出します。通信誤りが検出された場合、

    Device I/O error

 のエラーメッセージが表示されます。

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

文例

 SAVE "COM:"
 デバイス番号0からASCII形式のBASICプログラムを送出します。

CLOSE

機能

 RS-232C用ファイルをクローズします。

書式

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

解説

 OPEN文でオープンされたファイル番号をクローズします。クローズしたファイル番号は、次にオープンするとき使用できます。ファイルが送信モードでオープンされている場合には、クローズするとEOFコードが送信されます。RUN、END、CLEAR、NEWなどのコマンドを実行した場合も、クローズされます。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。省略すると全てのファイル番号がクローズされます。

文例

 CLOSE #1,#2
 ファイル番号1と2をクローズします。
 CLOSE
 全てのファイル番号をクローズします。

INPUT#

機能

 数値や文字を受信して変数に代入します。

書式

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

解説

 RS-232Cからデータを受信して、変数に代入します。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

 変数
 整数型定数、文字型変数、数値型配列変数、文字型配列変数を使用できます。
 LINE INPUT#とは以下の点が異なります。

文例

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

 ファイル番号1からデータを取得して文字型変数A$に代入して表示します。

LINE INPUT#

機能

 254文字までの文字を受信して文字型変数に代入します。

書式

 LINE INPUT #ファイル番号,変数

解説

 RS-232CからCRコードまでの文字列データを取得して、文字型変数に代入します。
 INPUT#文と異なり、データの区切りはCRコードのみ有効です。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

 変数
 文字型変数、文字型配列変数を使用できます。

文例

 10 OPEN "COM:" 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
 70 END

 ファイル番号1からデータを取得して文字型変数A$に代入して表示します。

OPEN

機能

 RS-232C用ファイルをオープンします。

書式

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

解説

 RS-232Cでデータの送受信をする前に、RS-232C用のファイルをオープンして、ファイル番号を割り当てます。

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

 モード
 OPEN時のモードを指定します。

  OUTPUT 送信モード
  出力用に使用します。CLOSEするときに、EOF(&H1A)コードが送信されます。

  INPUT 受信モード
  入力用に使用します。EOF(&H1A)コードを受信すると、それ以降のデータを受信することはできなくなりますから、必要な場合は、一度クローズして、オープンしなおしてください。EOFコードを受信したかどうかは、EOF関数で判ります。EOFコードは取得できません。

  省略したとき 送受信モード
  CLOSEしてもEOFコードは送信されません。また、EOF(1AH)コードを受信しても、そのまま渡されます。EOF関数では必ず0を返します。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。すでにオープンしているファイル番号を使用することはできません。

文例

 OPEN "COM:" FOR OUTPUT AS #1
 デバイス番号0を送信モードでファイル番号1としてオープンします。

PRINT#

機能

 数値や文字を送信します。

書式

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

解説

 式で指定したデータをRS-232C用へ送信します。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

 
 文字型、数値型の定数、変数、配列変数、式などが使用できます。

   ■数値
    最初に1個の空白(数値が正のとき)かマイナス符号が送信され、次に数字が文字列に変換され、最後に1個が出力されます。
   ■文字列
    文字列が文字数だけ出力されます。

 セパレータ
 カンマ(,)とセミコロン(;)を使用できます。省略した場合には、CRコードとLFコードが出力されます。

   ■カンマ(,)
    次のタブ位置までスペースを入れる。
   ■セミコロン(;)
    何も出力せず、直後に次のデータを出力する。

文例

 10 OPEN "COM:" FOR OUTPUT AS #1
 20 A$="ABC":B$="DEF"
 30 PRINT #1,A$,B$
 40 PRINT #1,A$,B$
 50 PRINT #1,+50,-50
 60 CLOSE
 70 END

 ファイル番号1に文字型変数の内容および数値型定数を送信します。実行結果は次のようになります。

 ABC     DEF
 ABCDEF
 50      -50

PRINT # USING

機能

 書式付きPRINT#

書式

 PRINT#ファイル番号、USING 書式記号; 式[,式]…

解説

 式で指定したデータを指定した書式で、RS-232Cへ送信します。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

 書式記号
 ■文字列を編集するもの。

!文字列の左側1文字を表示する。
&空白&文字列の左側から、指定した空白の数+2文字を表示する。
@@を編集用として指定した文字列で置き換える。
#数値を#で指定した桁数だけ表示する。
.小数点の位置を指定する。
+-数値に正負符号をつける。書式の左端につけると数値の前に、右端につけると数値の後ろに正負符号をつける(ただし、-は左端にはつけられない)。
**書式の左端を**にしておくと、数値の整数部の桁数が書式の指定より小さいときに、小さい分だけ*が表示される。
\\書式の左端を\\にしておくと、数値の直前に\がつけられる。\\は指数形式の書式指定をしているときには使えない。
**\書式の左端を**\しておくと、数値の直前に\がつけられ、整数部の桁数が書式の指定より小さいときに、小さい分だけ*が表示される。**\は指数形式の書式指定をしているときには使えない。,を整数部の#と#の間、あるいは小数点の左側に置いたときには、整数部が3桁ごとにカンマで区切られて表示される。,は指数形式の書式指定をしているときには使えない。
^^^^^^^^を#の後ろにつけると、数値が指数形式で表示される。書式に+または-を指定していない場合、数値が正ならば数値の前に空白が1つ、負なら数値の前に-が表示される。
%表示しようとする編集済みの数値が書式で指定した桁数より大きいと、数値の前に%がつけられる。

 書式の中にこれらの記号以外の文字を置くと、文字の位置に応じて数値の前や後ろにその文字が表示されます。

 
 文字型、数値型の定数、変数、配列変数、式などが使用できます。

文例

 10 A$="MSX-RS232C"
 20 OPEN "COM:" FOR OUTPUT AS #1
 30 PRINT #1,USING "":A$
 40 L=LEN(A$):IF L=1 THEN GOTO 70
 50 A$=RIGHT$(A$,L-1)
 60 GOTO 30
 70 CLOSE #1
 80 END

 ファイル番号1に文字型変数A$の文字列から左側1文字ずつを送信します。

 M
 S
 X
 -
 R
 S
 2
 3
 2
 C

EOF

機能

 EOFコード(&H1A)が受信されたかどうかを求めます。

書式

 EOF(ファイル番号)

解説

 EOF(&H1A)コードが受信され、それ以前のデータ全てをINPUT$などにより読み込まれた場合は-1を、それ以外なら0を返します。送受信モードでオープンした場合には必ず0が返ります。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

文例

 IF EOF(1) THEN CLOSE#1
 ファイル番号1の最後のデータが読み取られたら、そのファイルを閉じます。

INPUT$

機能

 指定した数の文字を受信します。

書式

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

解説

 RS-232Cから指定した数の文字を受信します。

 文字数
 1から255までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

文例

 10 OPEN "COM:" FOR INPUT AS #1
 20 IF LOC(1)>=50 THEN X$=INPUT$(50,#1) ELSE GOTO 20
 30 PRINT X$
 40 GOTO 20

 ファイル番号1から50文字を文字型変数X$に代入して表示します。

LOC

機能

 受信バッファの未取得文字数を求めます。

書式

 LOC(ファイル番号)

解説

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

文例

 10 OPEN "COM:" FOR INPUT AS #1
 20 IF LOC(1)>=1 THEN X$=INPUT$(1,#1) ELSE GOTO 50
 30 PRINT X$
 40 GOTO 20
 50 IF EOF(1) THEN CLOSE #1 ELSE GOTO 20
 60 END

 ファイル番号1から未取得文字数を求めて1文字を文字列型変数X$に代入して表示します。

LOF

機能

 受信バッファの残りバイト数を求めます。

書式

 LOF(ファイル番号)

解説

 ファイル番号
 1からMAXFILES文で指定された数までの整数値を指定できます。整数型定数、変数、配列変数、式などを使用できます。OPEN文で受信用もしくは送受信用にオープンしたファイル番号を指定します。

文例

 10 X0$=CHR$(&H11):X1$=CHR$(&H13)
 20 CALL COMINI("0:8N1NNNN",300,,0)
 30 OPEN "COM:" AS #1
 40 IF LOC(1)=12 THEN X$=INPUT$(1,#1) ELSE GOTO 40
 50 PRINT X$
 60 IF LOF(1)<=32 THEN PRINT #1,X1$
 70 IF LOF(1)>=120 THEN PRINT #1,X0$
 80 GOTO 40

 ファイル番号1の受信バッファの残りバイト数を求めて、32バイト以下になったらXOFFを送信し、120バイト以上になったらXONを送信します。

 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の存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。

  1. RETURN情報エリア用のワークエリア(64バイト)をとる
  2. 以下の設定を行い、FFCAH番地をコールする
コール手順
D デバイス番号 (8)
MSX RS-232C拡張BIOSのデバイス番号は8
E ファンクション番号 (0)
B RETURN情報エリアのスロットアドレス
スロットアドレスは、システムワークエリアに保存されている
HLRETURN情報エリアの先頭アドレス

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

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

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

戻り値
B 次のRETURN情報エリアのスロットアドレス
HL次のRETURN情報エリアの先頭アドレス
変更レジスタ
F

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

図7.3 RETURN情報の形式

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


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

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

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

EXBTBL:  DEFB    DVINFB    ; Device information
         DEFB    DVTYPE    ; Device type
         DEFB    0         ; Reserved
         JP      INIT      ; Initialize RS-232C port
         JP      OPEN      ; Open RS-232C port
         JP      STAT      ; Read status
         JP      GETCHR    ; Receive data
         JP      SNDCHR    ; Send data
         JP      CLOSE     ; Close RS-232C port
         JP      LOC       ; Reports the number of characters
                           ; in the receiver buffer
         JP      LOF       ; Reports the number of free spaces
                           ; left in the receiver buffer
         JP      BACKUP    ; Back up a character
         JP      SNDBRK    ; Send break character
         JP      DTR       ; Trun DTR(ER) line on/off
                           ; (multi type only)
         RET               ; Reserved for MODEM cartridge
         RET               ; Reserved for MODEM cartridge
         RET               ; Reserved for MODEM cartridge
         RET               ; Reserved for MODEM cartridge
         RET               ; Reserved for MODEM cartridge
         RET               ; Reserved for MODEM cartridge

DVINFB
 DVINFBは以下の構成でそのカートリッジの仕様を表します。

図7.5 DVINFBの形式

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

DVTYPE
 DVTYPEが0であればシングルチャンネルタイプのRS-232Cカートリッジです。この場合はSETCHNのエントリはありません。
 DVTYPEが0以外であればマルチチャンネルタイプのRS-232Cカートリッジです。

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

コール手順
IY上位8ビットにスロットアドレス
IX呼び出しアドレス

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

INIT

機能

 RS-232C拡張BIOSをイニシャライズします。

コール手順
Bパラメータテーブルのスロットアドレス
HLパラメータテーブルのアドレス


図7.6 INITパラメータテーブルの形式

 オフセット+0から+7はASCIIキャラクタ、+8から+12まではバイナリです。
 ASCIIキャラクタはすべて大文字とします。

戻り値
CYフラグパラメータの指定に間違いがある場合、1にセットされます。
変更レジスタ

 AF

解説

 イニシャライズデータの意味を説明します。

キャラクタ長
 通信データのビット長を指定します。

55ビット
66ビット
77ビット
88ビット

パリティ
 データに付加するパリティの指定をします。

Nパリティなし
E偶数パリティ
O奇数パリティ
I送信時にはパリティビットは0
受信時には無視する

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

1ストップビット1ビット
2ストップビット1.5ビット
3ストップビット2ビット

XON/XOFF制御
 XON/XOFF制御を行うかどうかの指定します。

XXON/XOFF制御を行う
N行わない

説明抜け


RS/CS制御
 RS/CS制御を行うかどうかの指定です。Hが指定されると、キャラクタを送信するときに、CSがチェックされます。

HRS/CS制御を行う
N行わない

説明抜け


受信LF挿入
 CR(0DH)コードを受信したときにそのあとにLF(0AH)が受信されたものとみなす制御を行うかどうかの指定です。

ALFを挿入する
N挿入しない

送信LF挿入
 CR(0DH)コードを送信した直後のLF(0AH)コードは送信せずに捨てる制御を行うかどうかの指定です。

ALFを削除する
N削除しない

SI/SO制御
 データ長が7ビットのときに0AHコードから0FFHのコードを送受信するとき文字セットの切り換えの制御を行うかどうかの指定です。SI(0FH)コードによりG0集合を呼び出し、SO(0EH)コードによりG1集合を呼び出します。

SSI/SO制御を行う
N行わない

受信/送信速度
 通信速度をビット/秒で以下の中から指定します。
  50、75、110、300、600、1200、1800、2000、2400、3600、4800、7200、9600、19200

 なお、受信速度、送信速度はそれぞれ別に設定できます。

送信タイムアウト
 データを送信するときに、XOFFコードが受信されていたりCSがOFFだったりしてデータが送信できない場合の待ち時間を指定します。単位は秒で範囲は0から255までです。0を指定した場合はタイムアウトせずに送出できるまで待ち続けます。

解説

 このエントリは他の機能を呼び出す前に、必ず一度は呼び出されなくてはなりません。

OPEN

機能

 RS-232Cをオープンします。

コール手順
HLFCBのアドレス(8000H番地以上のアドレスを指定する)
Cバッファ長(範囲は32文字〜127文字)
Eオープンモード
1<INPUT>モード
2<OUTPUT>モード
4<RAW> and <INPUT/OUTPUT>モード

FCBの取り方


図7.7 FCBの形式

戻り値
CYフラグオープンモードが正しくない場合は1にセットされます。
変更レジスタ

 AF

解説

 この機能はRS-232Cのすべての入出力処理に先立って行う必要があります。FCBエリアは9バイトのワークエリアと受信するデータの2倍の長さのバッファが必要です。
 受信データは受信データそのものと、エラー情報の2バイト構成でバッファに格納されます。子のバッファ長はCレジスタで指定されます。FCBエリアは8000H番地以上に置かなければいけません。これはRS-232Cカートリッジが割り込みによって呼び出されたときに、スロット間リード/ライトによるオーバーヘッドを避けるためにFCBエリアを直接アクセスしているためです。

STAT

機能

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

コール手順

 なし

戻り値
HLステータス
bit0 CD信号
bit1 RI信号
bit2 ブレーク信号検出(*)
bit3 DR信号
bit4 システム予約
bit5 システム予約
bit6 システム予約
bit7 CS信号
bit8 システム予約
bit9 システム予約
bit10 CTRL+STOPキー検出(*)
bit11 パリティエラー(*)
bit12 オーバーランエラー(*)
bit13 フレーミングエラー(*)
bit14 タイムアウトエラー(*)
bit15 バッファオーバーフロー(*)

 bit0からbit7はLレジスタ、bit8からbit15はHレジスタ、サポートされていない機能のビットは0を返します。
 (*)のビットは読み出されるとリセットされます。

変更レジスタ

 なし

GETCHR

機能

 受信バッファから文字を読み出します。

コール手順

 なし

戻り値
A受信文字
Sフラグエラーがある場合1にセットされます。
CYフラグオープンモードが1(Input mode)で、文字がEOFコードである場合1にセットされます。
変更レジスタ

 なし

解説

 このBIOSを呼び出す時は、LOCを使用して受信バッファに文字があるかどうかを調べて、文字がある場合にのみ呼び出せます。文字がない状態で呼び出したときの結果は、保証しません。

SNDCHR

機能

 RS-232Cに文字を送出します。

コール手順
A送信文字
戻り値
CフラグXOFFを受信していたりCSがONになっていなかったりしたときに、CTRL+STOPが押されると1にセットされます。
ZフラグXOFFを受信していたりCSがONになっていなかったときに、INITで指定された時間が経過しても待機条件がクリアされなかった場合、タイムアウトして、1にセットされます。
変更レジスタ

 AF

解説

 タイムアウトエラーが発生したとき、およびCTRL+STOPキーが押された場合、文字は送出しません。

CLOSE

機能

 RS-232Cポートをクローズします。

コール手順

 なし

戻り値

 OPEN時にOutputモードに設定されていた場合

CYフラグXOFFを受信していたりCSがONになっていなかったりしたときに、CTRL+STOPが押されると1にセットされます。
ZフラグXOFFを受信していたりCSがONになっていなかったときに、INITで指定された時間が経過しても待機条件がクリアされなかった場合、1にセットされます。

 OPEN時にInputモードに設定されていた場合
 なし

変更レジスタ

 AF

解説

 FCBが解放されます。OPEN時にOUTPUTモードの指定がされていた時は、EOFコード(1AH)が送出されます。
 タイムアウトエラーが発生する可能性があるのは、このEOFコードを送出するときだけです。
 CLOSEされると、ハードウェアの受信割り込みが禁止されます。

EOF

機能

 次の受信文字がEOFかどうかをチェックします。

コール手順

 なし

戻り値
HLEOFの場合、-1でさらにキャリーフラグが1にセットされます。
EOFでない場合もしくはまだ受信バッファに文字がない場合、0でさらにキャリーフラグが0にリセットされます。
RAWモードでRS-232Cポートがオープンされたときは、EOFは常に0で、キャリーフラグが0にリセットされます。
変更レジスタ

 AF

LOC

機能

 受信バッファの中にある文字数を返します。

コール手順

 なし

戻り値
HL受信バッファ内の文字数
変更レジスタ

 AF

解説

 この機能が返す値にはバックアップされていた文字が含まれます。デバイスがInputモードでオープンされている場合にはEOF以降の文字は含まれません。ただし、この文字もバッファのスペースを必要とします。

LOF

機能

 文字を受信バッファに戻します。これは1文字のみ可能です。

コール手順

 なし

戻り値
HL受信バッファの空き容量
変更レジスタ

 AF

解説

 この機能が返す値は、OPENの時に指定した受信バッファの文字数から上記LOCの値を引いた値に1を加えた(バックアップ文字の文)値です。

BACKUP

機能

 文字を受信バッファに戻します。これは1文字のみ可能です。

コール手順
Cバックアップする文字
戻り値

 なし

変更レジスタ

 AF

SNDBRK

機能

 指定した数のブレーク文字を送出します。

コール手順
DE送出するブレーク文字数
戻り値
CフラグCTRL+STOPが押されると1にセットされます。
変更レジスタ

 AF、DE

DTR

機能

 DTR(ER)をON/OFFします。

コール手順
Aコントロール指定
0DTR(ER)をOFFします。
0以外DTR(ER)をONします。
戻り値

 なし

変更レジスタ

 F

SETCHN

機能

 マルチチャンネルタイプのRS-232Cカートリッジで、制御の対象とするチャンネルを指定します。

コール手順
Eチャンネル番号
戻り値
Cフラグチャンネル番号が正しくない場合に1が返されます。
変更レジスタ

 AF、BC

解説

 チャンネル番号はリセット時に0に設定されます。

注意

 ここでのチャンネル番号は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>