これから、MMC(Multimedia Commands)を使ったCDドライブの制御プログラムについて書き散らしていこうと思います。いざ文章を書こうとすると、己の理解の足らなさに愕然としますが、まあ恥も外聞も忘れ、間違いを恐れずにいくつもりです。間違いを見つけたら、遠慮なく指摘してください。
昔、Z80(互換)でステッピングモーターを動かすシステムをいじったときは、先輩の作った回路を理解して、余っっている割り込みポートに押しボタンスイッチをはんだ付けして、そしてアセンブラで記述していったものです。今でも専用の装置や全く新しいシステムを作るときには、ハードウェアの構成からプログラムまで全部まとめてつくるのでしょう。だが、それではコストも時間もかかるし、汎用性がなくて他の独自の技術を持つメーカーが協力しづらいでしょう。なので規格とか仕様を作って、楽にしようというわけです。
パソコンと機器間をつなぐ規格には、IDE、ATA、ATAPI、SCSI、USBなどがあって、今も増え続けています。これらはハード側の仕様も全く異なるため、接続する機器のメーカー側がOSと接続方法の約束事に則ってデバイスドライバを提供しています。ソフトウェアを作成する側は、OSと個々のドライバ(機器)の仕様を見ながらプログラミングするのであり、その方がハードウェアの性能を最大限に引き出せたりもします。でもまあ、同じ種類の機器ならばどのメーカーが作った、どのような接続された機器でも同じ方法で操作できるのならば楽でいいでしょう。
で、Adaptec社がSCSI用にASPI(Advanced SCSI Programming Interface)というインタフェイスを作りました。機器メーカー側はASPIが用意してあるコマンドが使えるようなデバイスドライバを用意すれば言い訳です。そして、ATAPIはSCSIの影響を受けたためか、多くのコマンドが共通化されてしまいました。そしてASPI側で規格の差異を吸収するようにしたため、SCSI接続の機器だけでなく、ATAPI接続の機器までASPIで同じように制御できるようになったのです。
他に、SPTI(SCSI Pass-Through Interface)があります。これはMicrosoft社がWindows2000/XP系列用に用意したものです。OSの利点を考えれば、当たり前のような気もしますが。こちらはSCSI、ATAPIだけでなくUSB接続の機器も使えるらしいです。あちこちのソースコードを見る限りだと、ASPIとはコマンドの送信方法が違うけれども、コマンドの内容は同じでいけるようです。(Windows2000/XPをもっていないので、よく分からない。)
ASPI用には、共通(とはいっても、機器の種類によって動作は違う場合もあるが)のコマンド以外に、プリンタやスキャナといった機器別のコマンドセットがあります。その内、CD-ROM/R/RW、DVD-ROM/±R/RW、Blu-ray Disc、等のドライブ用のコマンド一式が、MMC(Multimedia Commands)です。
う〜ん。理解していないなあ。