MSX用FM音源ドライバ「いっぱいOPLL」

MSXでは、アプリケーション側からFM音源カートリッジ「FM-PAC」や本体に内蔵されたFM音源(OPLL)を使う場合、どれか一つの音源しか有効にしてはいけない、という決まりがあります。

それをぶっちぎって、同時にいっぱい使ってしまおう というドライバです。

ただし、このツールを使用することで本体や周辺機器に悪影響を与える可能性もありますので、必ず自己責任でお願いします。

ダウンロード

いっぱいOPLL(コンパイルツール・サンプルMML)

更新履歴

1.07 (2025/11/15)

動作環境

「いっぱいOPLL」は、PC上で動くMMLコンパイラと、そこから出力されるMSX用の実行ファイルから成り立っています。

MMLコンパイラ(IppaiOPLL.exe)

実行ファイル

使い方

直接記述方式

ファイル読み込み方式

MMLの書式について

MMLについては、なるべく一般的な書式に近づけたつもりですが、機能は極限までシンプルにしています。

大文字と小文字は厳密に区別しているので、マクロや16進数などの特別な場合以外は すべて小文字で記述してください。

音色定義

音色を定義するには、以下の3通りの定義方法があり、データの個数で自動的に判断されます。

また、16進数を用いる場合、データの先頭に 0x を付け、A~F は必ず大文字で記述してください。

  1. レジスタの値を直接指定する。最後にボイス移調を設定することもできる。(8ビット×8個あるいは9個)

    *@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>

    *@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>, <ボイス移調>

    *@1=0,0,0,27,249,244,18,34

  2. _VOICE COPY で配列に格納される値で指定する(16ビット×16個)

    *@<音色番号>= <配列要素0>,<配列要素1>, ..., <配列要素15>

    *@7=0x6C43,0x6573,0x6948,0x7468,0x1800,0x0008,0x0000,0x0000,0x08A3,0x76F1,0x0080,0x0000,0x0082,0x17F2,0x0080,0x0000

  3. FM音源のパラメータを個々に指定する(24~25個・MuSICA互換

    *@<音色番号>= <トータルレベル>,<フィードバック>, <(M)エンベロープタイプ>,<(M)マルチプルレベル>, <(M)アタック>,<(M)ディケイ>,<(M)サスティン>,<(M)リリース>, <(M)キーレイトスケール>,<(M)キーレベルスケール>,<(M)トレモロ>,<(M)ビブラート>,<(M)ディストーション>, <(C)エンベロープタイプ>,<(C)マルチプルレベル>, <(C)アタック>,<(C)ディケイ>,<(C)サスティン>,<(C)リリース>, <(C)キーレイトスケール>,<(C)キーレベルスケール>,<(C)トレモロ>,<(C)ビブラート>,<(C)ディストーション>, <ボイス移調>

    (M)はモジュレータ用パラメータ・(C)はキャリア用パラメータ・ボイス移調は省略可

    *@8=0,2, 0,2,15,1,0,0,0,0,0,0,1, 0,1,5,4,13,8,0,0,0,0,1, 0

注意事項

MMLコマンド

【※1】トラック番号について

【※2】音色番号について

特殊コマンド

コメント

マクロ

ラベルジャンプ

コンパイル制御

ボリューム制御

その他のオプションについて

出力形式

以下の3通りの出力形式があります。

  1. BLOADファイル

    BLOADコマンドでロード可能なマシン語ファイルを出力します。

    サウンドドライバと演奏データがセットになっているので、ファイル単体で演奏することができます。

  2. バイナリーファイル

    ヘッダのない純粋なバイナリーファイルを出力します。

    BASICからロードすることはできません。

    主にデバッグ用です。

  3. テープイメージ

    エミュレータなどで使用できるCASファイルを出力します。

    サウンドドライバと演奏データがセットになっているので、ファイル単体で演奏することができます。

    なんでもピーガーmkII等で音声ファイルに変換することで、実機でロードすることもできます。

※どの出力形式でも、「演奏データのみ」をチェックすると、サウンドドライバを出力せず演奏データのみを出力します。

各種情報

コンパイル後、演奏に必要なOPLLの個数や、演奏時に使用されるメモリが「各種情報」の部分に表示されます。

ファイルとして出力されるのは「演奏データ」と「サウンドドライバ」の部分になります。

実行方法

  1. ロードして演奏

    BLOAD形式あるいはテープイメージで出力した場合、ファイルにドライバーも含まれるので、簡単に演奏することができます。

    ディスクから読むのであれば、

    BLOAD"ファイル名",R

    テープイメージであれば、

    BLOAD"CAS:ファイル名",R

    と入力すれば、ファイルを読み込んだ後、自動的に演奏が開始されます。

    演奏中に何かキーを押すと停止します。

  2. 演奏のみ

    一度メモリ上にBLOADしたデータは、ドライバーを再実行することで何度でも演奏することができます。

    BLOAD"ファイル名"
    DEFUSR=&HD000

    と事前にデータを読み込んでおいて

    A=USR(0)

    と入力すれば、すぐに演奏が開始されます。

    また、

    A=USR(1)

    と入力すると、画面にインフォメーションを表示しながら演奏します。OPLLのスロットや個数なども確認できるので、うまく演奏されない場合は試してみてください。

    ちなみに、変数 A にはOPLLの個数が入ります。

  3. 演奏しない

    演奏せずにOPLLの個数だけが知りたい場合は

    A=USR(2)

    で A の値を調べてください。

    また、演奏せずにインフォメーション表示のみを行う場合は

    A=USR(3)

    です。

  4. マスターボリュームの調整

    「実機で演奏してみたら音量のバランスが悪かった」というような場合、OPLLごとのマスターボリュームを後から調整することができます。

    データを BLOAD した後、

    POKE&HD4E0,<OPLL0ボリューム補正値>
    POKE&HD4E1,<OPLL1ボリューム補正値>
    POKE&HD4E2,<OPLL2ボリューム補正値>
    POKE&HD4E3,<OPLL3ボリューム補正値>
    POKE&HD4E4,<OPLL4ボリューム補正値>
    POKE&HD4E5,<OPLL5ボリューム補正値>
    POKE&HD4E6,<OPLL6ボリューム補正値>
    POKE&HD4E7,<OPLL7ボリューム補正値>
    POKE&HD4E8,<OPLL8ボリューム補正値>
    POKE&HD4E9,<OPLL9ボリューム補正値>

    と、必要なOPLLの補正値を書き換えてから USR関数で演奏を開始してください。

    ここでPOKEする補正値は「 0~15 」で、「元のデータから減少させる値」です。デフォルトは 0 で、15を指定するとミュートになります(*Vコマンドと逆)。

    以前に書いたように、OPLLごとの音量は環境によって変わるので、例えば自分以外の人が作ったデータを演奏する場合などは、FMPACの切り替えスイッチや、このマスターボリューム補正を使うことで、最適なバランスを見つけてください。

サンプル

OPLLを3つ使ったサンプルのMMLファイルが入っています。参考にしてみてください。

ちなみに実機で演奏させた動画はこちら

最後に

MSXのお約束をブッチして、こんなことをやってみましたが、いかがだったでしょうか。

実機でFMPACを複数使う場合の注意ですが、例えば、「拡張スロットに4つのFMPACを差した場合」と、「基本スロットに1つだけFMPACを差した場合」では、本体から聴こえる音量が変わります。

もともと外部音源がどのように聴こえるかは、MSXの機種や環境によって異なりますし、「*V」コマンドでマスターボリュームを調整するなど、皆さんの環境に合わせてチューニングしてください。

また、複数のFMPACからの出力が合成されるとかなりの音量になるので、実機で試す場合、FMPACの音量切り替えは「中」か「小」にしておくと良いと思います。

ちなみに、実機でこんな環境が用意できるのは変態だけだと思うので、エミュレータ用の設定ファイルも入れておきました。

エミュレータ上だけでも、「OPLLx9個」の世界を楽しんでみてください。

コンパイラとサウンドドライバについては、以前作ったぴゅう太用のものを改変して作りました。

あくまでも「ちょっとしたお遊び」で始めたということもあって、最低限の機能のみとなっていますし、PSGも使えません。ごめんなさい。

IppaiOPLLに関する質問や、「こんなの作ってみたよー」みたいなお知らせは、twitter で @tiny_yarou までコメントください。よろしくお願いします!

初版 2019/06/08

更新 2025/11/12


DEEP! P6! DEEP! MSX! へ戻る