MA01 + CM-64 を DOS/V 機で使う
戻る

昔,PC-9801(NEC) + MIDI 編集ソフト RCM-PC98(カモンミュージック) + 音源モジュール CM-64(ローランド)という組み合わせで MIDI をやっていたことがあります.その CM-64 を現在使っている DOS/V 機の MS-Windows 上でも使いたいと思い,方法を検討しました.
ソフトは Windows Media Player やフリーの再生/編集ソフトでよいのですが,MIDI インターフェースを用意しなければなりません.
当時は RCM-PC98 に付属していた「MA01」という,RS-232 に接続する MIDI インターフェースを使っていました.それを 9 ピン − 25 ピン変換アダプタでシリアル ポートに接続し,シリアル ポート用の MIDI ドライバを入手すればよいだろうと考えました.
とりあえずカモンミュージック株式会社とローランド株式会社の Web ページに当たってみたところ,ローランド社に「シリアル MIDI ドライバ」というものがありました.ところが,そのドライバの対応機種のリストには CM-64 はありませんでした.あまりに古い機種なので載っていないのかなと思ったのですが,説明をよく読むとどうも技術的な理由により CM-64 には対応していないようでした.
その理由は以下のようなものであると思われます.
なお,私は CM-64 以外の音源を持っていないので,以下の記述には私の推測が含まれていることをお断りしておきます.

MIDI インターフェースは,転送方式としては RS-232(EIA-232)で使用されているのと同じ非同期シリアル転送で
データ・ビット長8
スタート・ビット長1
ストップ・ビット長1
パリティなし
という仕様です.しかし,電気的なインターフェースは RS-232 が ±5〜±15V の電圧インターフェースであるのに対し,MIDI は 5mA カレント ループとなっています.
MA01 では,コンピュータのシリアル ポートを使って MIDI 信号を作成し,アダプタで RS-232 と MIDI の電気的なインターフェースの変換を行うという方式を採っています.
そのようなタイプのアダプタを DOS/V 機で使用するにはひとつ問題があります.それは,DOS/V 機ではシリアル ポート コントローラのクロックの関係で,MIDI 用の 31.25 Kbps の信号を作成することができないということです.
DOS/V 機のシリアル ポートでは通常 16550 互換の UART を使用し,基準クロックは 1.8432 MHz です.そのため,1.8432 MHzを 16 分周した周波数 115.2 KHz の整数分の1のボーレートしか使用できません.115.2 KHz の 3 分の 1 で 38.4 Kbps,4 分の 1 で 28.8 Kbps となってしまい,31.25 Kbps は使用できません.

ローランド社のドライバの説明には次のような記述があります.
●使用するボーレート
DOS/VパソコンではPC-2に、NEC PC-9800シリーズではPC-1に設定します。

DOS/VパソコンでもPC-1に対応しているものがあります(画面上にはPC-1と
PC-2の両方が表示されます)。この場合PC-1を選択すると、より安定した
演奏が楽しめます。

ボーレートの設定に合わせて、音源背面のコンピューター・スイッチを設定
してください。コンピューター・スイッチの設定を変更したときは、必ず音
源の電源を一度切ってから入れなおしてください。

(「シリアル MIDI ドライバ ver2.1」 添付文書 “DRIVER.TXT” より抜粋)
CM-64 にはそのようなボーレート切り換えのスイッチはありません.
最近の音源モジュールでは,MIDI 規格の 31.25 Kbps 以外に 38.4 Kbps 等の速度を扱えるものがあると聞いたことがあります.多分,「PC-1」が 31.25 Kbps で「PC-2」が 38.4 Kbps 等なのではないかと思います.DOS/V 機では 31.25 Kbps が使用できないため「PC-2」に設定して使用するのだと思います.そして,CM-64 ではボーレートの切り換えができない(31.25 Kbps しか使用できない)ため,このドライバでは CM-64 を使うことができないということではないでしょうか.

だめなら他のインターフェースを用意するしかないのですが,せっかく MA01 があるのに,また別のインターフェースを買うためにあまりお金を掛けたくはありません.
サウンド ブラスタ互換ボードの MIDI インターフェース用の接続ケーブルを購入することも検討しましたが,仕様を見ると,ボードから出ている信号をただ MIDI に繋ぐだけではだめで,インターフェース変換のための回路が必要です.単なる接続ケーブルではなく変換回路を内蔵した接続アダプタになるため,こちらもそう安くは買えないようです.(自作する手もありますが...)

そこで,何とか MA01 を使用する方法がないか検討した末,最近のパソコンの速度ならソフトウェア処理で 31.25 Kbps の信号を作れるだろうと考え,シリアル ポート コントローラを使用せず,ソフトウェア処理で 31.25 Kbps の信号を作り出すドライバを作成することにしました.
シリアル ポート コントローラを使用しないと言っても,シリアル ポートに信号を出力するのですから全く使用しない訳ではありませんが,シリアル ポート コントローラは単なる信号の窓口として使用し,シリアル通信の機能は使用しないということです.

作成してテストしてみたところうまく動いてくれました.ただ,Windows はそのような用途に向いていないため,かなり強引な方法でこれを実現しています.
31.25 Kbps の速度では 1 ビットあたりの時間は 32 μs になりますので,32 μs の間隔でシリアル ポートの出力のオン/オフを切り換えなければなりません.

[図 1]
まず,Windows で使えるタイマーではこのような短いインターバルは作れないため,ソフトウェアでビジー ウェイトすることで必要なインターバルを作り出しています.Windows のデバイス ドライバ開発に関するドキュメントでは,ビジー ウェイトの時間は 50 μs を超えないように規定されています.
1 ビットあたりの時間は 32 μs ですが,1 バイト分の信号の時間は 10 ビット(データ・ビット:8,スタート・ビット:1,ストップ・ビット:1)分, 320 μs となって,制限を超えてしまいます.また,MIDI メッセージは一般に複数バイトで構成されます.たとえばノート オン メッセージは 3 バイトですから,ノート オンをひとつ出力するだけでも 3 バイト分,960 μs の間ビジー ウェイトすることになります.

また,信号の出力中に割り込みが入ってしまうと正しい波形を作ることができなくなりますので,信号出力中はドライバの割り込み要求レベル(IRQL)を上げることで,他のスレッドからの割り込みを禁止します.
割り込みを禁止する目的のためには割り込み要求レベルは高いほどよいのですが,ディスパッチャ レベルより高くしてしまうとデバイス割り込みも禁止されてしまいます.デバイス割り込みが禁止された状態が長時間続くと問題が起きるかも知れません.どこまで割り込み要求レベルを上げるかは設定画面で設定できるようになっています.2(ディスパッチャ レベル)〜26 の範囲で設定できます.
ストップ・ビットの部分で割り込みが入ってストップ・ビットが伸びても,通信には影響ありませんので,ストップ・ビットを出力したら割り込み要求レベルを下げています.したがって,割り込み要求レベルを上げている時間は,スタート・ビットの開始点からストップ・ビットの開始点までの 9 ビット分,288 μs になります.

[図 2]
デバイス ドライバ開発に関するドキュメントでは,割り込み要求レベルを上げている時間についても数十μs を超えないように規定されていますが,こちらについても制限を超えてしまいます.
また,1 バイト送信後一旦は割り込み要求レベルを下げても,すぐまた次のバイトの送信で再び割り込み要求レベルを上げますので,データ出力処理中はかなり長い時間割り込み要求レベルを上げた状態にあることになります.

このように,Windows のドライバの制限を超えた処理を行いますので,何か問題が起こる可能性を否定できません.少なくとも割り込み要求レベルをディスパッチャ レベルまでにしておけば,他のスレッドの処理が遅くなることはあっても,それ以上の影響は多分ないだろうと考えていますが,しかし Windows 内部の処理については詳細は分りませんので,何らかの不具合が発生する可能性がないとは言いきれません.
ハードウェアに変更を加えている訳ではありませんので,仮に何か問題が発生したとしてもコンピュータがハード的に壊れることはないと思いますが,コンピュータがフリーズしたり,場合によってはファイルが壊れてしまうというようなことが絶対にないとは言えません.

一応,私がテストした限りにおいては何も問題は起きませんでした.テストに使用したマシンの仕様は
CPU: Pentium 3 600 MHz
メモリ: 127 MB
です.このマシンで Windows 98 Second Edition,Windows 2000 および Windows XP の何れの上でも,特に問題はなく動作しました.
試しに,再生と同時に他のプログラムを色々動かしてみたところ(そのような使い方は推奨しませんが),Windows 2000 が最も安定に再生できました.Windows 98 では正しく再生できないことが多くなります.Windows XP でも稀に正しく信号出力できないときがあるようでした.

このドライバをご使用の際は,上で述べたことをご承知いただいた上で,ご自身の責任においてご使用くださるようお願いいたします.
上で述べたローランド社製のドライバで対応している機種をご使用の場合は,私のドライバよりローランド社製ドライバをご使用になった方が,危険性がなく CPU の負荷も低いのでよいと思います.
ローランド株式会社のホームページの URL は

http://www.roland.co.jp/

です.「サポート」−「ダウンロード」のページからダウンロードできます.

戻る