読者です 読者をやめる 読者になる 読者になる

Lost Technology

レトロPC、レトロゲーム、チップチューン等の主に技術的な雑記

MSX-AUDIO/MSX-MUSICの小ネタ集 #MSX30th

来月はMSX規格制定から30周年ということで、今までTwitterで思いついたときに呟いたネタとかそこから派生したネタをまとめて書いておく。
(2013/05/19):はてなの障害で画像うpできないので暫定公開
(2013/05/20):解決しますた。

MSX-AUDIOとMSX-MUSICの互換性と非互換性

MSX-AUDIO拡張BASICとMSX-MUSIC拡張BASICは、ソースコードレベルで高い互換性を持っている。*1
特にFM音源部分のMMLについてはほぼ完全な互換性があり、BASICプログラムにおいて、CALL MUSICとCALL AUDIOを挿げ替えるだけでおおむね演奏が可能である。*2

OPLL特有の音色定義について

ユーザー音色定義に使用する命令として、「CALL VOICE COPY」があり、音色データと配列変数の間で相互にコピーする機能が用意されている。
MSX-MUSICでは、音色データは完全にMSX-AUDIOと互換性をもっているがために、「Y8950(OPL)には無いけどOPLLにはあるパラメータ」については、この命令では操作することができない。
具体的には、以下のレジスタマップで赤く塗った部分。
f:id:madscient:20130519021256p:plain
このうち、DM/DCと書かれているビットが波形選択で、これを1にすると各オペレータの基準波形が半波整流された正弦波となる。DMはモジュレータ、DCはキャリアに対するフラグを表す。*3
この部分をBASICで操作するには、音色パラメータを設定後にOPLLのレジスタを直接書き換える。
f:id:madscient:20130519024507p:plain
この例ではわかりやすくするためにVOICE命令とAUDREG命令を使用したが、通常使用されるようにMML中で@コマンドで音色を指定するとこのビットもゼロに戻ってしまうため、そのような場合はレジスタに書き込む値をあらかじめ各音色ごとに計算しておいて、yコマンドでMMLに埋め込む。
f:id:madscient:20130520082430p:plain

OPLL内蔵音色相当の音色データ

MSX-MUSIC拡張BASICでは、VOICE COPY命令のコピー元にOPLL内蔵音色の番号*4を指定できない(指定するとIllegal function callエラー)が、音色データとしてはROM内にちゃんと入ってる。*5
ただし、この音色データはMSX-AUDIO拡張BASICのプリセットであって、OPLL内蔵音色のものではない。そのため、該当音色のデータをMSX-AUDIOでVOICE COPYしてMSX-MUSICに持ってきても、OPLL内蔵音とはかけ離れたMSX-AUDIOプリセット音が鳴るだけである。
OPLL内蔵音色をベースにちょっとだけパラメータを変えたい、といった場合には、VM2413*6のソースリストとかを参考に。*7

リズム音の音程

OPL系の音源チップでは、リズム音モードにおいても各リズム音のF-number*8を指定する必要があるが、MSX-AUDIO拡張BASICではこのパラメータが正しく設定されておらず、音程が低すぎて聴感上リズム音としてはほぼ役に立たない。*9
なんでこんな事が起きたかというと、Y8950(およびOPL)のアプリケーションマニュアルには「リズム音をちゃんと鳴らすにはch7~9のBlock/F-number/Multipleを適切な設定値にしてね」としか書かれておらず、「適切な設定値」が何なのかわからんようになっているからではないかと思われる。その点、OPLLのアプリケーションマニュアルには以下のように具体的な設定値が書かれていてわかりやすい。
f:id:madscient:20130520000647p:plain
というわけで、OPLLのアプリケーションマニュアルに掲載されている推奨値*10MSX-AUDIOに適用すると以下のようになる。
f:id:madscient:20130520000646p:plain
これと、前述のOPLL内蔵音色の移植を実装すれば、MSX-MUSIC用に書かれた多くのBASICプログラムをかなり忠実にMSX-AUDIOに移植できるはずである。*11

その他のトリビア

  • 「FS-CA1の音声出力はステレオのように見えるが、実は内部で繋がっていて両方同じ音が出ている。」というネタが語り草になっているが、実はも何も、あのでかい筐体(というか、一連のA1用横長カートリッジのシリーズ)の前面には内部ブロック図が書かれていて、2つの音声出力に同じ物が出ていることも明示されていたりする。それどころか、マニュアルの音声出力端子の説明にも「音声出力端子(モノラル)2個あります。」と明記されている。何故か赤と白の端子になってはいるが、もともとモノラル端子が2個あるだけで誰もステレオなんて言っていない。赤と白だからといって勝手にステレオだと思い込む方が悪いのである。
  • FS-CA1の内蔵ソフトの正式名称は「MSXミュージックシステム」である。
  • MSX-AUDIOのVOICEコマンドでは、音色定義を配列変数から直接設定することができる。DISK-配列変数間のCOPYコマンド*12と組み合わせると意外と便利。
  • YAMAHAのMSX最終機種yis805のカタログには、一時期「MSX-AUDIO(オプション)搭載可能」と書かれていたことがある。そのため、YAMAHAスロット用のMSX-AUDIO拡張ユニットを発売する予定があったものと思われる。*13
  • MSX-MUSIC/AUDIO拡張BASICのVOICE命令は、モード1(リズム音有効)でも9chぶん指定できる。その場合、リズム用音色が指定された音色に書き換えられ、リズム用MMLで(ノイズ混じりの)楽音が鳴る。*14

*1:MSX-MUSICのBIOSは新規開発だが、拡張BASICのFM音源部分についてはほぼMSX-AUDIOの流用である。

*2:あくまで音が鳴るだけ、だが。

*3:OPL2におけるWS=1に相当。

*4:0,2,3,4,5,6,9,10,12,14,16,23,24,33,48の15音色

*5:FM-PACだと$6E00あたり。内蔵機種ではメーカーごとに違う。

*6:1chipMSXにも内蔵されてるOPLL互換音源。

*7:もちろん本物のYM2413とは違っている可能性がある。

*8:発音する音程を決めるために指定するパラメータで、基準クロックに対する周波数比を設定する。設計の古いOPMとかでは音程をオクターブ+音名で指定する。

*9:そのため、MSX-AUDIO用のBASICプログラムではFM9音モードで@29~@33のドラム音色をMML中で切り替えたり、FMを使わずにADPCMに任せるなど、標準のリズム音を使った例がほとんど無い。

*10:MSX-MUSICを始め多くのOPLL採用システムでこの推奨値が使われているが、推奨したヤマハ自身はPSS-140等のOPLL搭載機でこの推奨値を使っていない。

*11:あくまでMUSIC拡張BASICのリズムMMLをそのまま移植する場合。MSX-AUDIOネイティブなら、FM3chも潰してリズム音出すより、PSGやADPCMを活用した方が良い。

*12:MSX-BASIC ver2.0以降。

*13:この時、FS-CA1未発売である。しかも、yis805の拡張スロットには物理的にFS-CA1が刺さらない。

*14:無論、何の役にも立たない。