MMLの成立
目次
MML の2文字コマンド
マイクロソフトの MML は一般に「1文字の英数字」とその後に続く数値(複数文字)で指示を出します。CDEFGAB に関しては数値は省略可能で、省略時にはあらかじめ L で設定して置いた値が使われます。
まぁ、現代の互換 MML でもその方向で進んでいるのですが、MML の機能拡張過程では、一時期「2文字命令」も登場しています。機能を増やす過程で、無意味な文字に機能を割り振るよりは意味のある文字にしようとしたようなのですが、後に命令が削除されたり、別の文字に振り替えられたりして、最終的に一部の特例を除いて1文字、という形に落ち着いたようです。
2文字命令は大抵「些細な機能」に割り振られたため、詳細なマニュアルがないと載っていません。手元には残念ながら詳細なマニュアルがそれほど多くは無いのですが、調べられた限りで挙げてみましょう。
コンパック・ポータブル(IBM互換機:1983/3)に添付された GW-BASIC は、マイクロソフトが「BASIC の決定版」と位置付けていたもので、それまでに開発された BASIC の機能をほとんど盛り込んでいました。
マイクロソフトとしては「方言」が多くなりすぎて保守の手間が増大してきたため、この BASIC で仕様統一を図る思惑でした。しかし、パソコンメーカーとしては「自社製品の独自性が薄れる」ために採用を断られる例が多く、あまり普及しません。
その上、開発中に西和彦からの強力なオファーで、GW-BASIC とは別の統一 BASIC を作る羽目になります。MSX-BASIC(1983/6)です。
この話も面白いのですが今回はおいといて、GW-BASIC にももちろん PLAY 文があります。この中に M から始まる2文字命令が5つ、作られています。M は Music の意味だとされていました。この5つの命令は、2つのグループに別れます。
MF/MB … Music Foreground / background
MN/ML/MS … Music Normal / Legato / Staccato
MF / MB は、PC-8801mkII SR の CMD BGM 、または、MSX AUDIO の CALL BGM です。…って説明でどれくらいの人が理解してくれるでしょう?
Background を許可すると、音楽を演奏しながら次の命令を実行します。Foreground だと、音楽の演奏中は次の命令に進みません。…と、この説明でも多分本当の理解に及ばない。
当時のマシンは遅く、PLAY 命令の MML を解釈するのにも一瞬待たされました。そのため、音楽演奏プログラムを作るために連続した PLAY 文を並べても、演奏が時々「つっかえた」ように間が空くのです。
これを防ぐため、演奏中に次の PLAY 文を読み込み、演奏の準備をしておく…というのが主な使い方です。ゲームの BGM に出来るほど長い曲を覚えられるわけではありません。
MN / ML / MS は、後に Q 命令に変わるものです。MN を指定すると、音長で指定された時間の 7/8 の時間だけ音を出します。ML だと 8/8 で、 MS だと 3/8 になります。PC-8801 mkII SR 等で搭載される Q 命令では、1~8 の数値で自由に音を出す時間を決められました。この命令は、おそらく Altair MUSIC から取り入れられたものです。
次に、PC-8801mkII(1983/11) 用の単音 MML である CMD SING 命令。一部の区間を「繰り返し演奏」するための機能があり、RP (RePeat) というコマンドを使用しました。
RP3[CDE] と書くと、CDE を3回繰り返します。コマンドの入れ子も可能で、8段階までは許されていました。
どうも、CMD SING は GW-BASIC の PLAY から移植されたもののようなのですが、GW-BASIC には RP はなく、CMD SING には M から始まる2文字命令がありません。
ただ、両者に共通して言えるのが、この「言語」の解釈エンジンが、音楽専用ではなくなっていること。実は、同じ解釈エンジンを使ってグラフィックもかけるのです。(DRAW / CMD TURTLE 命令を使いますが、コマンド文法体系が同じです)
今調査していて、同じ言語解釈エンジンを共有しているのだ、と気づいて愕然とした。
そのつもりでタートルグラフィックを見ると…よく出来てる。当時の LINE & PAINT で絵を書くプログラム数十行分を、1行に纏められる強力な仕組みだ。
CMD TURTLE は、MML を2次元グラフィックスに拡張した仕組みだったんだな…
最後に、PC8801mkII SR 以降の MML 。上に挙げた2文字コマンドは無くなっていますが、@ から始まる2文字コマンドが増えています。@V で音量の微調整、@W で wait など。@ 1文字でも意味があるため、文法解釈は多少ややこしそうです。
PDP-6 の Music Compiler について
TX-0 の MUSIC-X の系譜は絶滅した、と思っていますが、恨みがましく書いておきます。
ビル・ゲイツは、PDP-10 ハッカーでした。
中学生の時に学校の端末から PDP-10 の BASIC を使い始めたのをきっかけに、その端末サービスをやっていた会社で PDP-10 のプログラムのバグ探しをバイトでやっていますし、Altair BASIC も PDP-10 で 8080 エミュレータを作って作成しています。
マイクロソフト設立後は PDP-10 を購入し、仕事に使用するほど PDP-10 好き。
そして、PDP-10 は PDP-6 の上位互換機種でした。
ゲイツの通ったハーバード大学は、MIT のすぐ近くにあり、姉妹校提携をしています。キャンパスをつなぐシャトルバスが運用されているし、単位交換もできる。
ゲイツが在籍したのは 1973~1975年で、Music Compiler は 1970年までは保守されていた形跡がある。だから、ゲイツが Music Compiler を見ている可能性もあるのではないか…と調査中は考えていました。
もしそうなら、MML に影響を与えている可能性がある。
でも、ゲイツは Altair BASIC を作った時に、MITS 社の社員になっていて、Altair ソフトウェアコンテストの審査とかやってるんですよね。
ここで、Music of a sort を見て「Altair のデモプログラムとして最高のものだ」と絶賛しています。
AM ラジオに乗るノイズを使う、などのアイディアに感銘したのかもしれませんが、彼にとって「音楽演奏をするコンピューター」が初めてだったのではないかな、とも思います。
PDP-10 は当時としては優れた「マルチタスク」ができるシステムで、大抵は端末で時間貸しをしていましたから、タイプライターで出来ることしかできないのです。彼は音楽演奏する、なんて利用方法を思いつきもしなかったのでしょう。
というわけで、たぶんこの線は無い。実は、if800 の BASIC は誰が作ったのか? という話の展開でビル・ゲイツに行きついているのは、PDP-6 とのつながりの裏付け調査の名残です。MML の成立過程としては、プログラマが誰だろうと関係ない(笑)
蛇足なら削除…とも思ったのですが、「要求仕様(ベーシックマスターや MZ-80K のような音楽演奏)」に対して、実際に出来上がるものはプログラマに任されている、ということを示す必要はありました。そのためには、マイクロソフトの開発体制は書かなくてはならないし、ビル・ゲイツが書いたと思われる部分だけ消しても、記事の長さはたいして変わらないのです。面白いので残しました。
また、ビル・ゲイツが Music Compiler を知っている可能性に関しては、元マイクロソフト株式会社社長だった古川享氏に Twitter で質問までしていたのですが、無駄にお手を煩わせただけでした (^^;;
(でも、そこでいただいた言葉は調査を大きく進めるヒントになりました。ありがとうございました。)