FM-PAC

**FM-PAC**（エフエムパック）は、松下電器産業より1988年7月25日に発売された、MSXコンピュータ用の拡張カートリッジである。正式名称は「FM Pana Amusement Cartridge」。パナアミューズメントカートリッジと同様の一部のゲームなどに対応したバッテリーバックアップメモリとYM2413（OPLL）を搭載し、MSXに9重和音、もしくは6重和音 + ドラムセット5音の演奏機能と、対応ゲームに対するデータのセーブを実現する。希望小売価格は7,800円。

## 概要
FM-PACは「FM Pana Amusement Cartridge」を省略した呼び方である。そのほか、「FM PAC」または「FM P.A.C.」と略される。使用に際してはMSX本体のRAMが32KB以上必要である。

カートリッジの形態で供給され、パナアミューズメントカートリッジ同様、8KBのSRAMを搭載しており、8つのセグメントに分けてゲームソフトなどのセーブデータを記録することが可能であり、パナアミューズメントカートリッジと異なり後述のパックコマンダーと称するユーティリティーが内蔵されており、単体で他のカートリッジを含むセーブデータの管理も可能となっている。

後述のMSX-MUSICに対応したハードウェアでもあり、標準ではPSGが3チャンネルと1ビットサウンドポートのみの出力しか持っていなかったMSXに、2オペレータ、モノラル出力、9和音または6和音＋リズム5和音の発声を拡張することも可能である。

縦210mm、幅108mm、厚さ17mmと、一般的なMSX用カートリッジに比べてやや背高のサイズとなっている。FM音源の出力は拡張スロットのSUNDIN端子に接続され、本体の音声出力に合成される。本体が持つ音源とのミキシングバランスはMSX規格側で定義されていない為、調整できるようカートリッジ上部のスライドスイッチによって三段階に切り替えることが可能となっている。

## MSX-MUSIC
MSXの標準拡張音源規格としてMSX2の策定時にMSX-AUDIOが定義されていたが、実際にMSXのオプション機器として製品化されたFS-CA1が34,800円と高価な上にほとんど普及しなかったため、低コスト版として開発された。
MSX-AUDIO規格と比べてFM音源チップが廉価なものになった他、PCM用のRAMなどを必要とせず、拡張ハードウェアとして発売されたFM-PACでは音声出力も拡張スロットの音声入力を使用するなど大幅にコストダウンされている。

音源チップとして「YM2413」、ソフトウェアとして「拡張BASIC」と「FM BIOS」で構成され、他のMSXの拡張ハードウェアと異なり拡張BIOSは提供されずスロットにFM BIOSをマッピングした上で直接エントリアドレスをコールする実装になっている。

拡張BASICはMSX-AUDIOのサブセットになっているが、音名が同じであってもMSX-MUSICではハードウェアプリセット音が多く含まれ、似た音は出力されるものの同じ音が発声されるわけではない。また、ハードウェアプリセット音に該当する音色はROM内にはMSX-AUDIOと同じパラメータがセットされているものの、拡張BASICで該当する音色を読みだそうとした場合にはIllegal function callが発生するようになっている。

後述のMML節にあるとおり、通常利用される平均律以外の音律を指定できることも、他の純正MMLや、音源ドライバには見られない特徴である。

尚、FMPACの発売時期がMSX2とMSX2+の間で、MSX2+の規格と一緒に資料が出ていることからメーカーオプションとして発売されたものが規格として取り込まれたと認識されることが多いが、対応するソフトウェアのパッケージには当初より「MSX-MUSIC対応」と八分音符のロゴと共に書かれており、規格の定義の方が先で初期のソフトウェアであっても存在しなかったMSX-MUSIC内蔵の本体でもバグがない限りは正常に対応している。最大2本実装されるよう考慮された実装のMSX-AUDIOと異なり、MSX規格のI/Oポートに定義されたポートは1つ分であり、公式のドキュメントであるMSX Datapackの該当部では、MSX-MUSIC内蔵機器にFMPACを追加した時を例に、同一アドレスに複数の同一音源が接続されることで音量が二倍になることを挙げ、内蔵機器を検出の上、存在しない場合にカートリッジ側のI/Oポートを有効にするように明示している。また、商用アプリケーションについては直接制御を禁止し、FMBIOSを呼び出して制御することを要求している。内蔵機器と増設機器では識別子と電源投入時の初期状態が異なっており、前者は無条件にI/Oポートに接続されているが、後者は明示的に接続してやる必要がある。直接制御をおこなう場合は、内蔵機器を検索し、存在しなければ増設機器を検索し、存在した場合は該当スロットのフラグとなるアドレスを読み込んだ上でフラグを立てて書き込むという処理が必要となる。FMBIOSのINIOPLをコールした場合はFMBIOSを含む初期設定が行われるが、INIOPLを呼び出す場合該当スロットのページ1の状態が書き換わる為、メモリマップによっては注意が必要である。
初期状態では音源部は無効であるため後述のユーティリティーの利用も含め、バックアップメモリカートリッジとしてのFMPACの複数の接続、利用は問題はなく、ユーティリティーも各々を認識することができる。

このようにシステムとしては複数の音源をサポートしないものの、MSX-AUDIOとは別のリソースが割り振られているため共存は可能で、moonblasterなどのソフトウェアが同時使用をサポートしている他、 MSX CLUB GHQのdawn of timeなどのデモプログラムなどで、ステレオでの再生を実現している物などがある。

ドライバにあたるFM BIOSは、当時T&E SOFTに在籍していた前述の富田茂による設計とコーディングである。

1989年11月に発売された、『マイコンBASICマガジン』の別冊である『MSX/MSX2/MSX2+ ゲーム・ミュージック・プログラム大全集』では、多くの使用曲が収録された。

最初の商品化された実装であるFM-PACは爆発的なヒットを記録し、他機種のゲームをも含めたヒットチャートでベスト3入りを記録した上、パーソナルコンピュータ全般を取り扱う『マイコンBASICマガジン』誌上の音楽プログラム投稿コーナーへの投稿の8割がMSX-MUSIC用のデータで占められたとされ、また1989年5月から1990年4月までに実際に掲載された音楽プログラム61本のうち、15本がMSX-MUSICのものであった。

本製品発売後、リリースされたMSX2用のアプリケーションにおいても多くのソフトウェアが対応した。MSX2+ではオプション扱いの規格であるが、MSX2+機で実際にMSX-MUSICを搭載しなかった機種は松下「FS-A1FX」などごく一部に限られており、事実上の標準搭載機能となっている。後に制定されたMSXturboRにて正式に標準仕様に含まれた。使用するにはMSX本体のRAMが32KiB以上必要である。

## ハードウェアの直接制御による試み
前述のようにMSX-MUSICのシステムは複数のYM2413が存在してもどれか一つを使用するよう定義されており、ソフトウェア的なサポートも存在しないが、MSXの拡張機器の実装として推奨されているメモリマップドI/Oの存在や、スロットの仕組み、並びにカートリッジ内音源の有効無効の選択が可能になっている仕様から独立制御が可能である。
音声出力がスロットの端子を経由する出力のみのFM-PAC以外は商品化がなかったため用途は限定されるものの、内蔵デバイスはI/Oポート、FMPACはデバイスの有効無効、スロットの切り替えとメモリマップドI/Oの併用によってハードウェアをダイレクトに制御することで最大10個のYM2413を制御する試みも存在している。

また、YM2413をDACとして利用する試みも、制御のシステムとしてMSX-MUSICのハードウェアを用いている。

## パックコマンダー

本製品は、パナアミューズメントカートリッジの上位機種としての側面もあり、同製品に相当する一次電池によりバックアップされるSRAMが搭載されている。

ハードウェア的なバックアップメモリと、スロットにマッピングするための仕組みのみであった前身となる製品と異なり、本製品では「パックコマンダー」というデータ管理用ユーティリティソフトがROMに内蔵されており、BASIC上から「CALL FMPAC」と入力する事で、起動できた。

ユーティリティーを起動すると音源のテストとサンプルを兼ねたBGMが流れ、コピー、クリア、チェンジ、ファイルさくじょ、スロット、BGMのメニューが表示された。「スロット」のメニューのみ接続スロットとの対応を確認する機能のため、単体で接続された状態で実行する必要があるが、それ以外のメニューは電源投入時に接続されているPAC並びに、FMPAC、フロッピーディスクを対象としたデータのコピー、削除、移動などのマネジメントを行うことが可能になっている。

取扱説明書、ユーティリティー内のメッセージはコマンドを呪文に準え、ゲームに模した独特の表現となっている。

BGMは5曲選択できるものの、YM2413のみで構成された曲になっているため、音量バランスの基準にすることはできず、音を止めることも可能になっている。BGM1は松下電器産業発売・T&E SOFT開発によるMSX2用ゲームソフト「アシュギーネ 虚空の牙城」のステージ1、BGM2はオープニングデモの曲をFM音源アレンジしたものになっている。T&E SOFTのコンポーザーで、MBIOSの設計者である冨田茂によると、FM-PACサンプル曲のうち1曲は富田担当との事である。

また、隠しコマンドとして、BGM選択メニューを開いているときにTABキーを押すことによってキーボードを鍵盤楽器に見立てて演奏できるようになっていた。

## BASICからのMSX-MUSICの使用
FM音源制御命令はCALL命令のセットとして拡張されている。以下に主な命令とその使用法を述べる。

基本仕様はMSX-AUDIOの記述に準拠し、内蔵音色などは異なるものの、音名、パラメータなどは、互換性を意識したつくりとなっている。

;CALL MUSIC(1,0,1,1,1,1,1,1)
:FM音源BIOSを起動する。左端の値(0/1)でFM9チャンネル、FM6チャンネル+リズム5チャンネルのモードを切り替える。上記の様に1とした場合はリズムモードとなり、PLAY #2命令の各チャンネルにFM音源1チャンネルを割り当てる。CALL MUSIC(1,0,2) などとして、複数チャンネルを割り当てることもできる。第2パラメータの0はMSX-AUDIOの「CALL AUDIO」命令との表記上の互換性のために残されているものであり、MSX-MUSIC上では常に0を設定する。
;CALL VOICE(@0,@12)
:FM音源の各チャンネルに音色を設定する。チップ内蔵の15の音色以外は自作音色扱いとなり、1セットしかない自作音色用レジスタを占有してしまうため、同時に1種類しか使用できない。BASICの各命令の実行と、音源の演奏は標準設定では同期しておらず、このコマンドは主に演奏開始前に使用され、曲中での音色変更には通常、MMLの@コマンドを用いる。
;CALL TEMPER(9)
:音律を設定できる。
;CALL VOICE COPY(@63, tone%)
:音色データエリアと任意の配列変数間でデータをコピーする。データサイズは32バイト。MSX-BASICでは整数型が2バイトなので、dim tone%(15) と定義されるのが一般的である。上記の例では音色番号63に配列変数tone%の内容をコピーしているが、逆の動作なども可能である。MSX-MUSICでは@0から@62まではプリセットの音色があり、慣例的に自作音色は63から使用されることが多かった。一般的には音色設定は以下のように行われる。
 DIM TONE%(15):FOR I=0 TO 15:READ A$:TONE%(I) = VAL("&H" + A$):NEXT
 DATA 0000,0000,0000,0000
 DATA 0000,0000,0000,0000
 DATA 0000,0000,0000,0000
 DATA 0000,0000,0000,0000
 CALL VOICE COPY(TONE%, @63)
:曲中で複数の音色を使用する時は、PLAY文の合間に CALL VOICE COPY 文を挟むことで行う。
:音色設定にはFM音源のパラメータを直接（人間にとって自然に）表記して上記の32バイト配列にコンバートする手法や、FM音源チップのレジスタに直接値を書き込むコマンドの「Yコマンド」をMML中に用いる手法もあった。前者の変換プログラムは比較的に複雑なものになる。後者では演奏中に臨機応変に音色を変化させることができる。
;PLAY #2, "C", "D", A$
:MMLに従い演奏を行う。従来の「PLAY」文が拡張されたものである。上記の右端の例の通り文字列変数も使用可能であり、むしろその方が一般的である。どの桁がFM/PSGのどのチャンネルを演奏するかは、CALL MUSICでの設定による。従来のPLAY文と違い、32分音符もある程度ズレなく演奏させることができる。標準設定では演奏はBASICの実行とは非同期に（自動的に）演奏される。なお、1度のPLAY分で流し込めるMMLの長さはMSX-BASICにより制限される。第1パラメータから順に、FM音源チャンネル(0～6個)、リズムチャンネル(0～1個）、PSGチャンネル(3個)となっている。
; CALL PITCH(440) / CALL TRANSPOSE(n)
: MSX-MUSICでは、チューニングの変更も可能で、CALL PITCHではA4音の周波数を指定する。デフォルトでは440となっている。また、CALL TRANSPOSE を用いて、1セント(半音の1/100)単位でプラスマイナス12799セントの移調も可能。
## MML
MMLは一般的なものと大差ない。MSX-MUSICでの方言や特徴として、以下のようなものがある。
*オクターブ変更は > で上昇、 < で下降。当時としては一般的な記法である。
*{ } で音譜を括る事で連符となる。
*@Vコマンドで音量を128段階に細かく設定できる。実際は内部では16段階に変換されるが、変数を持ち込む処理などで有益である。
*Qコマンドを用いることでスタッカートやレガートを表現できる。8段階で調整可能。同様の表現を行うのに2000年代現在のデスクトップミュージック(DTM)ではゲートタイムと呼ばれることが多い。
*Tコマンドでテンポが設定される。MSXのタイマ割り込みは1/60秒単位でしか発生しないため、音の長さが n(整数)/60秒 で表せない時には、テンポにずれが生じる。計算上、14400÷テンポ÷使用したい音譜(1-64)の解が整数であれば、問題はない。Music Macro Language#システム上の制約と対策も参照されたし。

最も大きな点は、リズム音源演奏専用MMLの存在である。これは一般的なMMLとは全く異なり、例えば典型的な8ビートであれば、
 B!H8H8SH8H8 B!H8BH8SH8H8
となる。B:バスドラム S:スネアドラム H:ハイハット M:タムタム C:シンバル となっており、可読性に難はあるものの、1まとまりのMMLで複数の打楽器を鳴らせる仕様となっている。なお、!はアクセントとして、音量を通常のものとは異なる値に変化させる修飾コマンドである。必ずしも音量が上がるわけではない。
## BASICでの演奏の限界
BASICでの演奏ではポルタメントが行えない、ビブラートが再現できない、という問題があった。直接レジスタを制御するYコマンドで実現は可能であるが、直接送り込むデータを列挙するため、非常に煩雑でMMLの可読性を著しく損なう。

MSX-MUSICのパーカッションの音色は、よく出来ているとは言い難く、多用されるスネアドラム等に対しては、音色を加工する方法としてPSGのノイズを重ねたり、PSGに割り振るなどし、音階が存在しなかったタムタムに対しては、Yコマンドにより、直接チップに対して音程を指定する等の試行錯誤が見られた。電波新聞社刊、『MSX2/2+ ゲーム・ミュージックプログラム大全集』(1989, 電波新聞社)および『MSX2/2+ ゲーム・ミュージックプログラム大全集II』(1990, 電波新聞社)では実際に、掲載されているFM-PAC対応演奏プログラムの多くで、ドラムスの演奏にこのような工夫が見られる。

更にBASIC上でFM音源BIOSのワークエリアに直接値を書き込み、周波数のわずかに異なる2音を重ねデチューン効果を得る方法が確立されている。
 
なお、PSGパートでは、タイマ割り込みとPSGのレジスタの直接変更（MSXの場合はBIOSで行える）を用いたビブラート、コーラス、ソフトウェアエンベロープ、シンセタムなどの技法はFM-PAC発売以前から行われている。これらについても『マイコンBASICマガジン』(1988年以降)、『ゲーム・ミュージック・プログラム大全集III』(1988, 電波新聞社)、『MSX2/2+ゲーム・ミュージックプログラム大全集』(1989, 電波新聞社)および『MSX2/2+ゲーム・ミュージックプログラム大全集』(1990, 電波新聞社)などで多くの実例が見られる。
## チップ内蔵音色
音色用レジスタを占有する音色も含めると、MSX-MUSICでは64種(無音含む)の音色が用意されている。以下のものは制限無く使えるチップ内蔵音色である。何分この他には同時に1音色しか使用できないため、ほとんどのMSX-MUSIC用演奏データはそのほとんどの部分がこの15種の音色だけで演奏されている。なおチップ内では音色番号は0 - 15の値を取っており、下記の音色番号はMSX-MUSIC側が独自に割り振ったものである。また、取扱説明書p.44によれば、音色名については「参考のために付けたもので音色によっては、実際の楽器の音と異なることがあります。」ということになっている。

*@0 ピアノ1 （デフォルト）
*@2 ヴァイオリン
*@3 フルート
*@4 クラリネット
*@5 オーボエ
*@6 トランペット
*@9 オルガン
*@10 ギター
*@12 エレキベース（YM2413のアプリケーションマニュアルでは「Electric Guitar」とされている）
*@14 ハープシコード
*@16 ビブラフォン
*@23 シンセ・ベース
*@24 シンセサイザ
*@33 ウッドベース
*@48 ホルン
## FM音源BIOS内蔵音律

メジャーはMと、マイナーはmと略記した。取扱説明書 p.45を参考とした。
* 0 ピタゴラス
* 1 ミーントーン
* 2 ヴェルクマイスター
* 3 ヴェルクマイスター（修正）
* 4 ヴェルクマイスター（別）
* 5 キルンベルガー
* 6 キルンベルガー（修正）
* 7 ヴァロッティ・ヤング
* 8 ラモー
* 9 完全平均律(デフォルト)
*10 純正律 c M (a m)
*11 純正律 cis M (b m)
*12 純正律 d M (h m)
*13 純正律 es M (c m)
*14 純正律 e M (cis m)
*15 純正律 f M (d m)
*16 純正律 fis M (es m)
*17 純正律 g M (e m)
*18 純正律 gis M (f m)
*19 純正律 a M (fis m)
*20 純正律 b M (g m)
*21 純正律 h M (gis m)

## MSX用のその他の音源関係オプション
*MSX-AUDIO - 先発の規格。国内で広く普及することは無かった。
*FM Sound Synthesizer Unit II - SFG-05 YAMAHAから発売された拡張音源ユニット。YM2151(OPM)を搭載し、MIDI端子も装備。希望小売価格29,800円。ただし通常のカートリッジスロットとは異なる独自の形式を持ち、YAMAHA社やビクター社製のMSX以外では別売のアダプターが必要だった。ミュージックシーケンサーや拡張BASICも供給された。MSXの項目も参照。
*MIDIサウルス - 1990年にBIT2より発売された、MIDIインターフェイス。ミュージックシーケンサーがFDで付属。メロディー8トラック、リズム1トラック、最大16音ポリフォニック。四分音符の分解能は96または48。希望小売価格19800円。MSXの項目も参照。
*SCCカートリッジ - コナミから発売されたMSX2用アドベンチャーゲーム『スナッチャー』『SDスナッチャー』に同梱された拡張音源カートリッジ。SCC音源が搭載されている。単体での使用は想定されておらず単体発売もなかったが、MSXマガジンやマイコンBASICマガジン等で仕様が独自解析され鳴らすためのツールが提供された。
*MoonSound - 1994年にオランダのSunrise社より発売された拡張音源カートリッジ。国内未発売。OPL4音源「YMF278B」、GM音源用Wave Table ROM「YRW-801」、波形データ用RAMを搭載している。

## 脚注

## 参考文献
*『YM2413 FM Operator Type-LL (OPLL) Application Manual』 YAMAHA https://www.smspower.org/maxim/Documents/YM2413ApplicationManual OPLLについての詳細な仕様書。
*
* - MSX-BASIC上でのMSX-MUSICプログラミングの実例が多数紹介されている。若干の入門講座もある。
* - MSX-BASIC上でのMSX-MUSICによるプログラミング手法、および拡張命令が詳細に解説されているほか、音楽の基礎知識についても解説がなされている。
* 

## 関連文献
* - MSX-MUSICとは直接の関係は無いが、その他の拡張音源に対しての記述がある。

## 関連項目
* 内蔵音源