MC68000とは何か
目次
条件分岐・ジャンプ命令
それに対し、ジャンプは「GOTO」や「GOSUB」です。最近の言語では関数呼び出しもこれに当たると考えてよいでしょうか。こちらも、コンピューターにとっては不可欠な概念です。
CPUのコマンドとしては、一般に分岐はジャンプよりも高速に動作します。また、ジャンプとは異なりアドレスを相対位置で示す分岐命令では、プログラムをメモリ上のどこに配置しても同じように動作するというメリットもあります。
8086系のCPUでは分岐命令の「相対指定」の距離が短い(8bit)ため、実際のプログラムではジャンプ命令と組み合わせて使うことが必要です。
しかし、68000では条件分岐命令の有効距離が非常に長く(16bit)、分岐条件のなかに「必ず」というものがあるために、通常のプログラムのジャンプは分岐命令だけで書くことが出来ます。
68000の分岐命令にはデータレジスタを引き数にとるものがあり、その場合は条件をチェックした後、条件を満たさない場合はデータレジスタをデクリメントし、結果が正の場合だけジャンプします(条件を満たすか規定回数回るまでのループ、というのは結構使われるプログラムです)。
68000にはもちろんジャンプ命令もあり、こちらは32bitのアドレスすべてをカバーしています。
また、サブルーチンを呼び出すのにも分岐とジャンプの両方が使えますが、この場合の分岐命令にはフラグをチェックする機能はありません。
例外処理命令
一つの方法は「割り込み命令」を使う正統派の方法でもう一つは未実装命令を使う方法です。
未実装命令とは、命令としては無意味だけどそのコードを呼んでも動作が保証されるというもので、その保証される動作とは「割り込みルーチンに移ること」です。
(もっとも、保証されない命令を使っても「不当命令割り込み」という割り込みルーチンに移るのだが)
未実装命令には16bitの命令コードのうち上位4bitが F のものと A のものがあり、それ以下の12bitには何を設定しても構いません。また、割り込みルーチン内で戻り先アドレスを適切に操作してくれれば、後ろにデータをつけても構いません。
つまり、68000はCPUの命令をユーザーが追加できるのです。ここまで基本的な命令を説明しましたが、プログラム上良く使うルーチンなどは命令にしてしまい、快適にプログラムを組んだりすることが可能です。
通常、未実装命令はOSが使用して、サービスルーチンの呼び出しなどに使っています(だって、それが一番「良く使うルーチン」だもの)。
メモリ保護
68000はUNIXを動かすために設計されているため、マルチユーザー下での安定性を確 保するための工夫がなされています。それが端的に現われているのがメモリ保護です。
68000はプログラムの実行をスーパーバイザーモードかユーザーモードかのいずれかでおこないま す。スーパーバイザーのプログラムがユーザーに移行することはできますが、その逆はできません。
そして、メモリはハード設計時にスーパーバイザーメモリとユーザーメモリにわけられ、ユーザーモードでスーパーバイザーメモリをアクセスしようとすると、例外処理が発生し、アクセスできません。
この特徴をいかし、OSやI/Oをスーパーバイザーメモリに置き、ユーザーに直接触らせ ないことで危険な状況を回避できます。
この場合、OSのファンクション呼び出しなどは割り込みをつかって処理します。割りこみプログラムはスーパーバイザーモードで走りますので、こうすることで間接的にユーザーモードからスーパーバイザーメモリにアクセスできます。
ところで、、スタックエリアはどちらに置くのでしょう。スタックはプログラムの実行に重要なものなのでユーザーエリアに置くのは危険ですし、かといってスーパーバイザーエリアに置いてしまえばユーザーモードでスタックが使えなくなってしまいます。
この問題を解決するため、68000は2つのスタックポインタをもちます。それはどちらもa7レジスタとして表現されますが、内部では2本のレジスタもち、実行モードによってどちらを見せるか切り替えているのです。
メモリ保護とはちがいますが、奇数アドレスから16bit、32bitをアクセスした場合にも例外が発生します。これにより、暴走したプログラムも結構な割合でとまってくれました。
(Macintoshでプログラムが暴走すると爆弾が出たりするのは、この割り込みを使用しています。)
このように、68000は効率的なプログラムが作れるようにレジスタや命令を工夫するとともに、「プログラムとは暴走するものだ」という前提に立ってその対策を講じています。
しかしUNIXワークステーションはともかく、パソコン用のCPUとしては、いささか先進的過ぎたかもしれません。メモリ保護機能などは多くのパソコンで無視され、アプリケーションもスーパーバイザーモードで動かしたり(Macintosh)、ユーザープログラムが簡単にスーパーバイザーに変身できたり(X68000)するOSがほとんどのようです。
68000はこの後も進化を続け、バグを取った68010、外部バスも32bitにした68020、さらにバグを取った68030、パイプラインを導入して大幅に高速化した68040、そして最新の(最近発売されたばかりの)68060とシリーズ化されています。
ところで余談なのですが、68000の普及は意外なところで進んだというデータがあります。
1986年ごろ、68000の総出荷数は70万個程度でした(おそらく、ほとんどの用途がMacintoshでしょう)。
しかしこの頃、家庭用ゲーム機のメガドライブ(セガ社)が68000をCPUに選び、コストを抑えるために100万個を発注しました。総出荷数よりも多い数を一度に注文した、というので当時は多くのパソコン雑誌で話題になりました。
結局このゲーム機は2200万台を売り上げ、量産効果で68000はかなり安価になりました。昔は組み込み機器などには安価なZ80が使用されていましたが、最近は組み込みでも68000が使われることが多くなったと聞きます。
最近は同じ理由で、一番売れているRISC CPUはRシリーズでも PowerPCでもなく、なんとSHシリーズなんだそうです。
これも、最初の原因は同じくセが社の「セガサターン」で、1台に2つのSH2と1つのSH1が使われていたからのようです。しかし、量産効果で値段の下がったSHシリーズはその後もいろいろなところで使用され、今では定番の組み込みチップの一つとなっています。
最近では ARMチップも良く使われる、という話もちらほら聞きます。ARMはやはり松下のゲーム機「3DO REAL」やAppleの「Newton Message Pad」に使われていたCPUですが、爆発的に売れたのはヨーロッパの携帯電話で標準CPUとして採用されて以降だとか。
いずれにせよ、CPUの売れ行きを決めるのが実は「パソコン」ではなく、それ以外の製品だというのが興味深いところです。
2011.03.05追記
上記記事は、基本的に1997年に書かれたものです。以下、余談部分の「その後」。
その後、国内でも ARM チップの使用は一般的になり、現状では ARM が一番普及した CPU シリーズとなっています。
特に 2001 年には各社が相次いで ARM を採用した新製品を発表。その後、ARM の決定的優位が決まりました。
QUALCOM は 2001 年に BREW を発表。これは、ARM を採用した携帯電話でネイティブアプリを動作させるための環境でした。国内では 2003 年より AU が採用しています。
任天堂は 2001 年にゲームボーイアドバンスを発売。それまでのゲームボーイシリーズが CPU に 8080 を採用していたのに対し、互換性のない ARM を使用しながら、エミュレーションによって互換性を確保する、という離れ業をやってのけました。その後、NintendoDS 、Nintendo 3DS に至るまで ARM がメイン CPU です。
GB までの CPU は持っていて、プログラムはそこで実行されているようです。エミュレーションしているのは、一部のハードウェアの違いを吸収する部分のみ、と言うことみたい。
Apple Computer(当時)は、2001 年に iPod を発売。CPU に ARM を採用しました。後の iPhone 、iPad に至るまで、CPU は ARM 系のままです。
翌年になりますが、SHARP は 2002 年に Zaurus SL シリーズを発売。CPU に ARM を、OS に Linux を採用した PDA として話題を呼びました。これはその後シリーズが途絶えますが、事実上の後継機として、現在は Netwalker や GARAPAGOS が続いています。
一方で、モバイル「以外」の分野では、案外 PowerPC が頑張っていたりもします。
Wii も PS3 も XBOX も、PowerPC を採用しています。完全な組み込み用途なら ARM なのですが、組み込み以上 PC 未満の製品だと PowerPC という感じ。
一方で、2006年以前は PowerPC を使用していた Mac は、現在では Intel CPU を使用しています。これも、PowerPC の性能が「PC未満」でしかなくなったことを物語ります。
これだけ CPU が細分化したのも、CPU が組み込まれる製品が増えたから。いまどき、どんな単純な製品にも CPU が組み込まれていたりします。1980年代に坂村教授が「どこにでも、なんにでもパソコンが組み込まれる」(後に「ユビキュタス・コンピューティング」と呼ばれた思想)と予言した時にはみんな笑っていたけど、現実になったね。