見出し画像

8086 - 今も生き残るアーキテクチャ

8086は今も使われているインテルCPUの始祖にあたります。もちろん1度に扱えるビット数も16ビットから64ビットになりましたし、ハードウェア的には全く違うものになっていますが、基本的なアーキテクチャに変化はありません。今でも適切なフォーマット(OSが扱えるもの)で作られた86バイナリを実行することは出来るはずです。実に長きにわたり使われ続けているこのCPUシリーズも、振り返れば紆余曲折の歴史でもあります。

i4004から486世代まで インテルCPUを一気に振り返る

インテルは8080の大成功に続き8085をリリースしましたが、次は16ビットの時代になることは十分に見越していました。ライバルとなったザイログを見ても、ソフトウェア資産を活かす必要があることはわかっていましたが、どうやって8ビットの資産を16ビットに持ち込むかで悩んでいました。これはミニコンの会社が16ビットから32ビットへの移行で苦しんだのを目の当たりにしてから日が浅かったので、これをうまくやらないと会社の存続にかかわることであることを強く意識していたのでしょう。

最初に8086を1978年6月にリリースしました。8080とバイナリとしての互換性は無いものの、レジスタ構成には上位互換性を持たせて、アセンブラレベルでの互換性を持たせることにより8080のソフトウェア資産を継承しようとしました。

将来のメモリ空間拡張に備えアドレスバスは20ビット(1M)としました。プログラムごとに使えるメモリ空間は16ビットのままですが、セグメントレジスタを使ってアドレス変換を行うことでメモリ空間を拡張することにしました。

まだまだメモリは高価でしたし、すぐに実装されるメモリが爆発的に増えることはありませんでしたし、パッケージも40ピンDIPを使いたかったという事情もあります。たったの4ビット分とはいえ16倍のアドレス空間があれば十分と考えたのはインテルらしいです。

64Kまでしか使わないのであれば、セグメントレジスタはすべて0のままで使えば8080との互換性は維持できます。OSさえ新しくすれば一般的なプログラムは64Kまでしか使えなくても、OS自身やVRAMを64Kから追い出せば、それだけでも大きなメモリ空間をそれぞれのプログラムで使うことができます。インテルとしてはなかなかエレガントな解決方法だと思ったのでしょう。

なぜ完全な互換性を持った上で16ビットへの拡張を行う方法を選ばなかったのかと言えば、おそらくミニコン時代に試みられたモードビットの考え方が失敗だったと判断したのだと思います。古いコードのためのエンジンを内蔵すると、いつまでもそれをやめることができず、複数のアーキテクチャを保持し続けることになります。これがその後の拡張の際にも足を引っ張り続け、いくらシリコン密度が上げられると言っても永遠にコストを払い続けなければなりません。ザイログに奪われたシェアを早く取り戻す必要があったはずですが、これだけは譲れず、アセンブラレベルでの互換性で妥協したのでしょう。

当時はZ-80が4MHzの時代でしたから、これを急に引き上げることはできず最初は5MHzでリリースされました。バスの設計を見直した結果、命令を実行する効率は上がっていたので、それなりに速度を稼ぐことは出来ていました。ただ機能が上がった時に良くあるのですが、16ビットに対する処理は素晴らしいのですが、8ビットを扱う際のペナルティや命令コードが複雑になった結果、命令長が長くなったりして、せっかくの速度向上が打ち消されてしまうことも多少はあった気がします。それでもバイト単位の処理が出来たのは大事なことでした(68000への当てつけ)。

拡張された命令でついに掛け算だけではなく割り算もできるようになり、さらにコプロセッサという別立てのチップを使うことでハードウェアで浮動小数点演算までをサポートしました。これでミニコンを使っていたマーケットに切り込む準備は整ったわけです。

さてi8086のリリースに続き翌1979年6月にはデータバスを8ビットにシュリンクしたi8088をリリースしました。こちらは既存の8ビットCPUの周辺回路が使え、最小限の設計変更での乗り換えを促すものでした。実際APPLE][にも拡張スロットで使える8088カードが販売されるようになり、16ビットCPU向けのOSを使うことが出来ました。

第7回 PCのエンジン「プロセッサ」の歴史(1)~i8088からIntel386までの道のり IBM PCシリーズに採用された86系16bitプロセッサたち

iAPX86

OSなどソフトウェアが整備されるのには時間がかかり、CP/Mとほぼ互換性のあるCP/M-86は、ようやく1981年頃にリリースされました。ただ8080にどっぷり使っていたCP/Mは小さな非互換性を潰すのに手間取ったようで、普及のテンポは決して早くなかった気がします。

ここで決定的な出来事が起こります。1981年8月にIBMが8088を採用したいわゆる”IBM PC”を発表し、CP/MだけではなくマイクロソフトがリリースしたPC-DOS(後のMS-DOS)を引っ提げて登場したことです。スペックとしては尖ったところはなく、いかにも「標準」なPCでした。IBMは互換機の登場を防ぐことが出来なかったのですが、逆に多くの互換機が登場したことにより、PCのデファクトスタンダードとなり、PCと言えばこの機種と、その互換機を指すまでになりました。これがインテルだけではなくIBMとマイクロソフトが大きく発展した礎となりました。

Intel 8086

Intel 8088

IBM PC

そういえば8086のセグメントレジスタは単なるアドレス変換機であってメモリ保護などの機能も無かったのですが、これを使いこなすためにスモールであるとかラージであるとかのメモリモデルを強要されることになり、この問題を解決するには長い道のりが必要でした。80186、80286と進化するにつれ解消されることが目指されましたが、中途半端なものに終わり、80386になってようやく8ビットの呪いから解放されました。このため今でも、この386が基本となるアーキテクチャが続いています。この辺りはいずれまとめてみますね。

写真は、以下のものを使わせていただきました。
https://commons.wikimedia.org/wiki/File:KL_Intel_D8086.jpg


この記事が気に入ったらサポートをしてみませんか?