MSXでは、アプリケーション側からFM音源カートリッジ「FM-PAC」や本体に内蔵されたFM音源(OPLL)を使う場合、どれか一つの音源しか有効にしてはいけない、という決まりがあります。
それをぶっちぎって、同時にいっぱい使ってしまおう というドライバです。
ただし、このツールを使用することで本体や周辺機器に悪影響を与える可能性もありますので、必ず自己責任でお願いします。
1.06 (2025/11/12)
「いっぱいOPLL」は、PC上で動くMMLコンパイラと、そこから出力されるMSX用の実行ファイルから成り立っています。

MMLについては、なるべく一般的な書式に近づけたつもりですが、機能は極限までシンプルにしています。
大文字と小文字は厳密に区別しているので、マクロや16進数などの特別な場合以外は すべて小文字で記述してください。
音色を定義するには、以下の3通りの定義方法があり、データの個数で自動的に判断されます。
また、16進数を用いる場合、データの先頭に 0x を付け、A~F は必ず大文字で記述してください。
*@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>
*@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>, <ボイス移調>
*@1=0,0,0,27,249,244,18,34
*@<音色番号>= <配列要素0>,<配列要素1>, ..., <配列要素15>
*@7=0x6C43,0x6573,0x6948,0x7468,0x1800,0x0008,0x0000,0x0000,0x08A3,0x76F1,0x0080,0x0000,0x0082,0x17F2,0x0080,0x0000
*@<音色番号>= <トータルレベル>,<フィードバック>, <(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
> … 1オクターブ上げる。
< … 1オクターブ下げる。
( … ボリュームを1上げる。直後に数値をつけると任意の数だけ上げる。
) … ボリュームを1下げる。直後に数値をつけると任意の数だけ下げる。
【※1】トラック番号について
トラック番号を使いわけることで、同時に10個までのOPLLを制御することができます。
トラック番号とOPLLの関係は以下の通りです。
| トラック番号 | 対応するOPLL |
|---|---|
| p0~9 | OPLL#1(p9 がリズムトラック) |
| p10~19 | OPLL#2(p19 がリズムトラック) |
| p20~29 | OPLL#3(p29 がリズムトラック) |
| p30~39 | OPLL#4(p39 がリズムトラック) |
| p40~49 | OPLL#5(p49 がリズムトラック) |
| p50~59 | OPLL#6(p59 がリズムトラック) |
| p60~69 | OPLL#7(p69 がリズムトラック) |
| p70~79 | OPLL#8(p79 がリズムトラック) |
| p80~89 | OPLL#9(p89 がリズムトラック) |
| p90~99 | OPLL#10(p99 がリズムトラック) |
※例えば、OPLL#1でリズム音源を使用しない場合は p0~p8 までの 9トラックが使用可能、リズム音源を使用する場合は p0~p5 の 6トラックと p9 が使用可能となります(無視してもエラーにはなりませんが、正しく発音されません)。
【※2】音色番号について
以下の内蔵音色は *@ コマンドによる編集ができません
| 音色番号 | 楽器名 |
|---|---|
| @0 | ピアノ |
| @2 | バイオリン |
| @3 | フルート |
| @4 | クラリネット |
| @5 | オーボエ |
| @6 | トランペット |
| @9 | オルガン |
| @10 | ギター |
| @12 | エレキベース |
| @14 | ハープシコード |
| @16 | ビブラフォン |
| @23 | シンセベース |
| @24 | シンセ |
| @33 | ウッドベース |
| @48 | ホルン |
*M001 = cde
*M002 = fga
*M003 = o4 M001 M002 o5 M001 M002
p0 M003 ;o4 cde fga o5 cde fga と演奏される
p0 v15 o4cde L001 fga ;普通に v15 o4cde fga と演奏される
p1 v15 o5cdefga J001 ;v15 o5cdefga と演奏した後、L001 の位置にジャンプする。オクターブはコンパイル時に確定するため v15 o5cdefga v15 o4fga と演奏される
p2 v12 o5cdefga J001 ;v12 o5cdefga と演奏した後、L001 の位置にジャンプする。ボリュームは実行時に確定するため v12 o5cdefga v12 o4fga と演奏される
p0 o4c>c>c ;o4c o5c o6c と演奏される
*REVO
p0 o4c>c>c ;o4c o3c o2c と演奏される
*END
p0 cdefg ;この行は演奏されない
p0 v15c v14c ;実は v15 と v14 では音量は変化しない
*DIRV
p0 v15c v14c ;音量が変化するようになる
*V0=15 ;OPLL0はデフォルトの音量
*V1=12 ;OPLL1に出力されるボリュームを3下げる
;OPLL0
p00 v12 c ;OPLL0はマスターボリュームがそのままなのでMMLどおりに v12c と演奏される
;OPLL1
p10 v12 c ;OPLL1はマスターボリュームが3つ下げられるので v9c と演奏される
p19 v15 b4s4 ;OPLL1はリズムを含むすべてのトラックのボリュームが3つ下げられるため v12b4s4 と演奏される
以下の3通りの出力形式があります。
BLOADコマンドでロード可能なマシン語ファイルを出力します。
サウンドドライバと演奏データがセットになっているので、ファイル単体で演奏することができます。
ファイルをフロッピーディスクにコピーし、MSXにそのディスクをセットした状態で、BASICから BLOAD"ファイル名",R で実行可能です。
ヘッダのない純粋なバイナリーファイルを出力します。
BASICからロードすることはできません。
主にデバッグ用です。
エミュレータなどで使用できるCASファイルを出力します。
なんでもピーガーmkII等で音声ファイルに変換することで、実機でロードすることもできます。
BASICから BLOAD"CAS:",R で実行可能です。
※どの出力形式でも、「演奏データのみ」をチェックすると、サウンドドライバを出力せず演奏データのみを出力します。
コンパイル後、演奏に必要なOPLLの個数や、演奏時に使用されるメモリが「各種情報」の部分に表示されます。
ファイルとして出力されるのは「演奏データ」と「サウンドドライバ」の部分になります。
サウンドドライバは必ず D000H から配置されるので、一度ドライバをロードした後は DEFUSR=&HD000:A=USR(0) で何度でも演奏することができます。
OPLLを3つ使ったサンプルのMMLファイルが入っています。参考にしてみてください。
ちなみに実機で演奏させた動画はこちら
MSXのお約束をブッチして、こんなことをやってみましたが、いかがだったでしょうか。
実機でFMPACを複数使う場合の注意ですが、例えば、拡張スロットに4つのFMPACを差した場合と、基本スロットに1つだけFMPACを差した場合では、本体から聴こえる音量が変わります。
もともと外部音源がどのように聴こえるかは、MSXの機種や環境によって異なりますし、マスターボリュームを調整するなど、皆さんの環境に合わせてチューニングしてください。
また、複数のFMPACからの出力が合成されるとかなりの音量になるので、実機で試す場合、FMPACの音量切り替えは「中」か「小」にしておくと良いと思います。
ちなみに、実機でこんな環境が用意できるのは変態だけだと思うので、エミュレータ用の設定ファイルも入れておきました。
エミュレータ上だけでも、「OPLLx9個」の世界を楽しんでみてください。
コンパイラとサウンドドライバについては、以前作ったぴゅう太用のものを改変して作りました。
あくまでも「ちょっとしたお遊び」で始めたということもあって、最低限の機能のみとなっていますし、PSGも使えません。ごめんなさい。
IppaiOPLLに関する質問や、「こんなの作ってみたよー」みたいなお知らせは、twitter で @tiny_yarou までコメントください。よろしくお願いします!
初版 2019/06/08
更新 2025/11/12