0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

intel 8088 をまた弄ろうと思った話と intel 8086~intel 386 の話

Last updated at Posted at 2025-10-21

先日探し物をしていたら,子供の頃にゴミ捨て場から拾って集めていたジャンクボードから intel 8088 が出てきました。
それを機に,久しぶりにマイコンのボードでも作ろうか?と思い,ちょっと調べ事を始めました。
今回はそんな日記半分な記事,そんじゃしょうがないとx86の歴史をざっと駆け足で。

intel 8088 って何?(4004から8086までの話)

さて,日記だけではあまり役に立たないので,intel 8088 についても幾らか。
恐らくのCPUの名前を知っている人は・・・あ,いやその前に。

まず intel 8088 ってCPUの名前です。
何だかやたら ”8” だらけな名前のCPUですが,これ,有名なCPUの派生形です。

intel 8088 は intel 8086 のデータバスを8bitにしたものです。
intel 8086 は後のi386等の祖先の16bitのCPUです。

 
・・・と,下手をするとこの段階で若い人は知らないかもしれませんね。(この記事書いてる時,私,既に42歳です)
なので,まずは少しintelのアーキテクチャの歴史(?)の話でも。
 
 
intelのCPUの歴史ですが,intel 4004 辺りからがCPUらしい歴史となります。
今度は4だらけの名前ですが,名前の通り4bitのCPUとなります。(なお,正確にはCPUと呼べるかはちょっと怪しい)

4bit?0~Fまでしか扱えないの?と思うかもしれませんが,0~Fまで扱える以上0~9も扱うことができ,私たちが使う10進数は何とか扱えるんですね。
なので,4bitというのは一つ実用なビット数なんですね。

 
その後,intelは ”8008" というCPUを作ります。
もうなんとなく想像つきますね?そう,今度は8bitです。

ファミコンが8bitですから,ここまでくると何となくコンピュータっぽい感じですね。
が,まだアドレスは14bitしかなく,16KiB(16kbyte)のメモリーしか扱えませんでした。
かつ,CPUとして付いてないと困る機能だけ何とか入ってるといった感じのCPUで,大きなプログラムを実行するのは難しく,機械語の命令も物足りず使い道は限定的でした。

そのため,intelは更に ”8080” というCPUを作ります。
最後の0と8ひっくり返したような型番ですね。けど中身は大違いです。
ここでやっと今私たちが知ってるCPUに近い物になります。

アドレスは16bitとなり64KiB(当時としては超大容量)のメモリーを扱え,レジスタも増えて近代化。
機械語の命令も増え,かつ近代的な物になり,非常に扱いやすくなったため一気に普及しました。

その後,intelは8080を改良した8085というCPUを作ります。
幾つか命令が追加され,割り込みコントローラーも簡単なものを内蔵(8080は8259という外付けの割り込みの制御を行うICが必要),そして何より・・・

 
5V単一電源で動作するようになりました。

 
え?これ当たり前じゃないの?って?

いや,逆か。コア電源は?って?

コア電源はありません。その代わりに内部の回路の構造上,8080の動作のために+5Vに加え ”-5V” と+12Vが必要でした。
何と,3種類も電源が必要だったんですね。8085はそれを改善しました。

と,8085も登場し,ライバルのモトローラはMC6809も発売,さらにはZilogのZ-80も登場,使いやすく家庭にも普及,一般個人もコンピュータを使う時代,マイコンピュータ(今でいえばパーソナルコンピュータ)の時代が始まります。

 
さて,8bitが普及しコンピュータをどんどん活用するようになると,次にほしいのは16bitのCPUですよね?
と,生まれてきたのが冒頭の "8086" です。
この際に扱えるメモリーも16倍の1MiB(1Mbyte)に増えます。

そして,なんと・・・
 

掛け算・割り算命令が使えるようになります。

 
再び,です・・・よね。「「 それ当たり前じゃないの? 」」

実は,8086まで掛け算・割り算の命令が機械語にありませんでした。
やっと「四」則演算になります。そういった意味でもやっと「計算機としての機能がすべて搭載された」とも言えます。
 
 
・・・と,ココで一つ決定的な仕組みが搭載されます。「セグメント」という考え方です。

先ほど「16倍の1MiB」と書きましたが,実は8086って64KiBが16ブロックといった感じでメモリーが管理されています。
1MiBを扱う20ビットのアドレス,CPUの中では「16bit + 4bit」という風に扱われています。

コレは過去の64KiBが上限だった8bitのシステムとの互換性の確保の問題です。
これにより,8bitの頃のICがそのまま使えたりします。

が,CPUが16bitになったものでデータバスは16bitになりました。
過去の回路を無修正でそのまま使う事はできません。
 
 
で,一緒に登場したのが 8088 ってわけ。

 
8088は内部は8086のまま,データバスを8bitにしたものです。
データバスは8bit,64KiBも考慮されていますから,既存のシステムにそのまま接続できます。
(正確にはバスの動作の違いがあり少しCPUの周辺に回路が必要,DMAも1MiBの空間では少し改造が必要)

余談ですが,8086と8088の間にはコプロセッサとして "8087"(浮動小数点の演算を扱うIC)が,8088の次には "8089"(IO版DMAみたいなIC)があったりします。

で,この記事書いてる人,中学生の頃だったか?に8088を使ってみたくてしょうがなく。
既存の8bitの回路で16bitのCPUが使えるわけですから,そりゃ便利で。
実際,回路が簡単なもので,8086より8088で,という電子工作ファンもそこそこいました。

からの,冒頭の言いかけた言葉。
初期の IBM PC も同様の理由で8088を使っていました。
それを知っている人は,私よりずっとベテランのエンジニアたちでしょう。

intel 8088 って何?(8086のその後,i386へ)

さて,せっかくなので8086のその後の話も。
16bitの次は32bit?という感じですが,その間に80186と80286というCPUをIntelは作っており,いずれも16bitです。

この2つのうち,80186は8086とそう大きくは変わりません。
DMACなどをワンチップ化したもので,どちらかというと組み込み向け要素もあったCPUです。
 
 
が,大きく変わってしまったのが80286です。
(いや,Intelの狙いはちょっと違ったんだけど・・・)

こちらは一線を画す変更が行われました。
MMUが搭載され,保護仮想アドレスモード,いわゆる「プロテクトモード」が搭載されました。
私感ですが,扱えるメモリーが増えた,とかよりこちらの方が影響大きいと感じます。

 
・・・って,これも組み込みやOSいじる人じゃないと意味わからないですね。

C言語のポインターで配列の範囲外のメモリーにアクセスした際に例外が発生しますよね?
あの例外を出しているのって,MMUなんです。
MMUの ”保護”仮想アドレスモード,プロテクトモードを使います。
マルチタスクのOS,Windowsもプロテクトモードで動いています。

MMUとは ”Memory Management Unit" で,メモリーの管理に関するいろいろな機能を提供します。
搭載メモリー以上のメモリーを使える,スワップファイルってありますが,あれもMMUがかかわります。
 

そう,80286でMMUが搭載されたことにより,OSの当たり前な機能の実現や,高度な言語の安全なメモリーへのアクセスができるようになったんです。
 
 
が,これがお初物故にチョット使いづらく(苦笑
真に使いやすいMMUの登場は,80286の後継,32bitの "intel i386" にてとなります。

そして,このi386がその先に続く長い32bitの時代の礎となります。”IA-32” ってやつです。
これらの機能をフルに活用し,WindowsNTやPC-UNIX等の現代的なOSが生まれることになります。

余談ですが,Linux等でポインターの操作を誤った際に「Segmentation Fault」ってメッセージが出ますが,あの ”Segmentation” は8086のセグメントが元といえば元です。
で,さっきにおわせた「セグメント」,この考え方もちょっと使ってるのですよ,MMU。
ある大きさでメモリーを「ページ」という風に分けて,何ページ目のメモリーと管理してます。(最も,”ページ” って呼び名は別のシステムを参考にしたせいですが)

と,よく ”x86” と言いますが,文字通り,8086,「86」がすべての始祖になっていたりします。
このような互換性を優先し16bitはおろか8bitを引きずった構造は "x64" や "AMD64" と呼んでいる64bitまで続くことになります。
64bitになった際にある程度切り捨ててはいますが,いまだに名残が残ってたりします。

で?どんな8088のマシン作るのさ?

さて,ここからは最近作ろうと思い始まった8088のボードのお話。
まだ何か明確に決めているわけではないのですが,大雑把には以下のような構成にしようかと思います。

Block_Diagram.png

うん。大雑把。

一応後々のことを考えDMACも搭載しようかと考えています。
で,いくら16bit,今まで遊んでた8bitとは違う,昔はれっきとしたパソコンだったといえども,現代の64bitのCPUのようなパワーには恐らく4~5桁足りません。

そのため使用用途は考える必要があり,いろいろ検討し趣味の電子工作に使おうと思っています。
コンピュータの応用の回路を作りたい日もあるのですが,WindowsやPC-UNIXのような立派なOSに管理された環境ではI/O等に自由にアクセスするわけにはいきません。
なので,「16bitのデッカいポケコン」位の物を作ってみようかと思います。

そのため,細かい話ですが,図中のCTC(・・・はZ-80だけの呼び名だっけ?)は複数あるかのような表記になっています。
タイマーなんてなんぼあってもいいですからね!
タイマー多ければ三相誘導電動機(工場や電車に使うでっかいモーター)すら回りますわ!

 
その他・・・RTCも欲しいですかね?
画面への表示はどうしようか?とも思いましたが,モノクロの小型液晶モジュールで最初は行こうかと。
CRTCやグラフィクスのコントローラーなんて作るの大変ですから。
今はメモリー(ある種VRAM)を積んでモジュール化されている液晶が安価に手に入りますから,それで一旦は何がしの表示を出そうと思います。

 
ただ,後々やってみたいこととして80286まではアップグレードしてみたく。
(実は・・・調べ事してた際に買っちゃった)
先に書いた通り,80286からはMMUを搭載します。
i386まではご遠慮するとして,80286でMMUを少し触ってみたいな,と思っています。

アカウントの自己紹介にもある通り,私は制御や電子回路の畑で育ってきており,エンベデッド系の人間です。
お恥ずかしながら資格もエンベデッド系しか持っていません。
(・・・と第二種電気工事士やら,無線やら,建設災害防止協会の免許やらも,な。SEとは?)

 
その資格に恥じないよう,MMUを息吸ってる内に弄っておきたいですネ!
かつ,80286もこれまた中学生ぐらいの頃にいじってみたかったCPUでもあります。ぜひ,80286にアップグレードしてみたいですね。
そのためにも,8088で16bitのシステムに,周辺回路としてはその先につながるI/Oに慣れる,慣れることができるボードにしようかと考えています。

といってもこの青焼きっぷり。どうなる事やら?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?