{{include unfinished_page}} ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}←[[1章 MSX RS-232C]] ,{BSIZE:0|RIGHT} [[3.1 ハードウェア|3.1 MSX-MUSIC ハードウェア]] → !!2.1 ハードウェア !2.1.1 基本構成  MSX MODEMの基本ハードウェア構成は下図のとおりです。シリアルインターフェイスとしてi8251相当、ROM 32Kバイト、RAM(バッテリバックアップ)8Kバイト、NCU制御のためのパラレルポートとしてi8255相当を基本前提としています。ただし、後述のBIOSにより、この基本ハードウェアとは異なった構成のハードウェアにも移植が可能です。 {{svg 図7.8.svg}} '''図7.8 MSX MODEMの基本構成'''  短縮ダイヤルやシステムの設定値を記憶するためのバッテリバックアップされたCMOS RAMはオプション設定とします。ソフトウェアではファイルとしてのデータアクセスをサポートするため容量は任意ですが、ディレクトリ領域を必要とすることなどから少なくとも2Kバイト程度が実用限界と思われます。単にシステムのコンフィギュレーションを記憶しておくメモリスイッチとしてなら必要最小限の容量でも動作可能です。なお、短縮ダイヤル用メモリは1件につき約100バイト程度の容量が必要です。 !!2.2 NUCの構成  NCUは図8.9のハードウェアを想定しています。この図は想定しているすべてのハードウェア機能を記載していますので、必ずしもこのような構成が実際的であるわけではありません。 {{svg 図7.9.svg}} '''図7.9 NCUの構成'''  SW1は回線をモデムダイアラに接続するか、外部電話機に接続するかを選択します。SW2は電話線上の音を装置付属のスピーカまたはMSXのカートリッジバスを通じてTVのスピーカでモニタするかどうかを選択します。RI信号はリングパルスをワンショットなどにより波形整形されたものとします。したがって、リング信号が存在するあいだ1が返されます。内蔵ハンドセット、内蔵ハンズフリーフォンは他の電話機能、たとえば音楽を回線に送り出したりするものと置き換えることができます。 !!2.3 メモリの構成  MSX MODEMのシステムソフトウェアが実行するためには、図8.10で示すメモリ構成が必要です。ここでいうBANKとはMSX本来のBANKではなく、同一スロット内でローカルに拡張されたBANKを意味します。 {{svg 図7.10.svg}} '''図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 ,COMHELP,COMINIのHELPメッセージを表示します,154 ,COMINI*,通信回線の初期化を行います,155 ,COMOFF*,通信用ポートからの割り込みを禁止します,158 ,COMON*,通信用ポートからの割り込みを許可します,159 ,COMPROTOCOL*,ファイル転送に用いるプロトコルを決定します,159 ,COMSTAT*,通信用ポートのステータスを求めます,161 ,COMSTOP*,通信用ポートからの割り込みを保留します,163 ,COMTERM*,ターミナルモードに切り換えます,164 ,DIAL,電話番号送出を行います,169 ,DIALC,1桁だけの電話番号を送出します,171 ,DTMF,DTMFデコーダよりデータを読み取ります,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 ,機能{SIZE:100|CENTER}  電話回線にブレーク信号を送出します。 ,書式{SIZE:100|CENTER}  CALL COMBREAK[("デバイス番号:"],式)] ,解説{SIZE:100|CENTER}  式で指定された文字数文のブレーク信号を電話回線に出力します。ブレーク信号送出中、すべての送出データは強制的に0になります。  CALL COMBREAK文を実行する前にOPEN文でCOM用のファイルがオープンされていなければ「File not open」になります。  '''デバイス番号'''  設定の対象となるカートリッジを0(*)〜9の整数値で指定します。省略するときはコロン(:)まで省略します。  '''式'''  数値定数、変数、配列変数、式で指定します。指定できる範囲は3から32767までの値です。省略した場合は1、0になります。 ,文例{SIZE:100|CENTER}  CALL COMBREAK("0:",20)  20文字分のブレイク信号を電話回線に出力します。 !CALL COM GOSUB !CALL COMHELP !CALL COMINI !CALL COMOFF !CALL COMON !CALL COMPROTOCOL !CALL COMSTAT !CALL COMSTOP !CALL COMTERM !CALL DIAL !CALL DTMF !CALL LINESEL !CALL NETCARRIER !CALL NETCONFIG !CALL NET GOSUB !CALL NETHOOK !CALL NETINI !CALL NETMODEM !CALL NETOFF !CALL NETON !CALL NETSPK !CALL NETSTAT !CALL NETSTOP !LOAD !MERGE !RUN !SAVE !CLOSE !INPUT # !LINE INPUT # !OPEN !PRINT # !PRINT # USING !EOF !INPUT $ ,機能{SIZE:100|CENTER}  ファイルから指定した数の文字を入力します ,書式{SIZE:100|CENTER}  INPUT $(文字数,[#]ファイル番号) ,解説{SIZE:100|CENTER}  指定された数の文字(文字型データ)を受信バッファ用のファイルから入力します。ファイル番号は、OPEN文で受信バッファとして開かれたファイルを指定します。  '''文字数'''  入力する文字数を1〜255の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。  '''ファイル番号'''  対象となるファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。  '''返される値'''  文字型です。 ,文例{SIZE:100|CENTER}  ファイル番号を1として受信バッファ用ファイルを開き、そのファイルから50文字入力したところで、それを文字変数X$に代入して、ファイルを閉じます。 !LOC ,機能{SIZE:100|CENTER}  ファイル中の文字数を返します ,書式{SIZE:100|CENTER}  LOC(ファイル番号) ,解説{SIZE:100|CENTER}  受信バッファ用ファイルの文字数を返します。  '''ファイル番号'''  OPEN文で受信バッファとして開かれたファイル番号を1〜(MAXFILESで指定された数)の整数値で指定します。指定には、整数型定数、変数、配列変数、式が使えます。  '''返される値'''  0以上128以下の整数が返されます。 !LOF ,機能{SIZE:100|CENTER}  ファイルの中の空きスペースの大きさを返します ,書式{SIZE:100|CENTER}  LOF(ファイル番号) ,解説{SIZE:100|CENTER}  受信バッファ中の空きスペースを文字数で返します。  '''ファイル番号'''  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の存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。 +RETURN情報エリア用のワークエリア(64バイト)を取る +以下の設定を行い、0FFCAH番地をコールする。 ,コール手順 D E B HL  RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。 '''表7.18 RAMのスロットアドレス''' ,ページ,ワークエリアのアドレス ,0,F341H ,1,F342H ,2,F343H ,3,F344H ,戻り値 ,変更レジスタ  RETURN情報はアプリケーションが指定した領域に次のように格納されます。 {{svg 図7.11.svg}} '''図7.11 RETURN情報の形式'''  MSX MODEMが無いときは、BレジスタとHLレジスタの内容が変わらずに返ってきます。スロットアドレスの表現はMSX共通で以下の通りです。 {{svg 図7.12.svg}} '''図7.12 スロットアドレスの形式'''  拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。 '''2.BIOSジャンプテーブル'''  拡張BIOSは以下に示すジャンプテーブルを持っています。アプリケーションソフトウェアは、インタースロットコールなどで各エントリを呼び出すことにより、BIOSの各機能を利用できます。 ■DVINFB  デバイスインフォメーションバイト(DVINFB)はMODEMカートリッジに、各オプションがあるかどうかを示します。 {{svg 図7.13.svg}} '''図7.13 DVINFBの形式'''  各ビットは1でその機能があることを示し、0でないことを示します。 ■DVTYPE  デバイスタイプバイト()はこの装置がマルチタイプかシングルタイプかを示します。マルチタイプとは複数のMSX MODEMカートリッジを同時にスロットに挿入でき、ここに制御できる装置のことです。  DVTYPEが0以外であれば、マルチタイプのモデムカートリッジです。 {{svg 図7.14.svg}} '''図7.14 DVTYPEの形式''' '''3.拡張BIOSの各機能'''  拡張BIOSの各機能はインタースロットコールにより呼び出されます。インタースロットコールの呼び出しアドレスは001CHです。 ,コール手順 IY 上位8ビットにスロットアドレス IX コールアドレス その他のレジスタは機能により異なります。各項を参照して下さい。 ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}←[[1章 MSX RS-232C]] ,{BSIZE:0|RIGHT} [[3.1 ハードウェア|3.1 MSX-MUSIC ハードウェア]] →