Yamamoto's Laboratory
Lesson
   1.Numbers
   2.Memory
   3.RAM
   4.Ports
   5.Timer
   6.ROM
   7.8085A
   8.Instruction
   9.Monitor
Appendix

Lesson 7Functinal Description of 8085

Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 7 に関するメモです.ここでは,主にIntel社のMPU 8085のハードウェアー構成について学習します(参照:MM=8000のマニュアルのLesson 7).8085の命令は,次のLesson 8で説明します.

photo 8085
8085MPU(NEC 8442HD D8085AC)

目次


1970年代の状況

歴史

8ビットMPUが次々と開発された1970年代中頃までの歴史を振り返ってみましょう.Intel社の最初のMPUである4004が完成したのは1971年ことです.これは,4ビットのMPUで当初は電卓用に開発されました.次に,8ビットのMPU 8008が1972年に完成します.これは用途が制限されたため,あまり普及しませんでした.無理に18ピンのパッケージに詰め込んだことが大きな問題だったようです.そこで,大幅に改良加えられた40ピンの8080が1974年に登場します.この8080は80系の元祖といわれるCPUで,8085,Z80へつながります.この8080は,世界初のパーソナルコンピューターであるMITS社のAltair 8800を生むわけで,その後のPCの発展に大きな寄与を果たしたと思います.ただ,8080にも電源の問題(±5と12Vが必要)などがあり,8085はそれらを解決しました.8085のマイナーなバージョンアップしたものがここで使う8085Aです.その後,8ビットMPUの勝者であるZilog社のZ80が発売されたのが1976年です.

ここでの作るMM-8000は,1970年代半ばのアマチュアが作っていたコンピューターと似ています.普通のアマチュアが作れるパーソナルコンピューターの限界は,8ビットのMPUを使ったものでしょう.部品点数は少ないし,その動作も単純だからです.そのため,「学習教材に最適」と思うのは私だけではないはずです.現在の64/32ビットのパーソナルコンピューターでも,その基本は大きく変わったわけではありませんので,簡単な教材で基礎を学習することは大きな意味があります.

その他のMPUについても,簡単に話しておいた方が良いでしょう.8ビットMPUには,80系以外の68系や65系があります.68系の最初のMPUは,MC6800で8080に数ヶ月遅れて発売されたとのことです.ミニコンのPDP-11のアーキテクチャーを参考に設計したと言われています.65系は,MOS Technology社のMOD 6502というMPUが1976年に発売されました.これは,価格が安かったことから,Apple IIに搭載され,一躍メジャーになりました.

8085Aとは

8085Aは,8ビットの汎用MPUです.動作させるための外付け部品が少ないので,小さなシステムでは大変コストパフォーマンスが良かったようです.64Kバイトのメモリーが使え,また大きなシステムを制御するためのステータスラインがあります.

8085Aの機能

8085Aの内部構造

8085Aの詳細情報が必要であれば,いろいろなWEBサイトからデータシートがダウンロードできます.私は,OKIセミコンダクタ株式会社の「MSM80C85AHRS/GS/JSのデータシート」を参考にしました.

以下は,ほとんどマニュアル(WHAT'S IN THE 8085A)の訳です.

8085Aには,本来のMPUの役割である命令セットの実行に加えて,クロック発生とシステムバス制御,割り込み機能があります(下図のブロックダイアグラムを参照).8085Aのデータ転送は,8ビット単位で行われ,双方向の3ステートバス(AD0〜AD7が使われます.このバスは時間分割され,アドレスの下位8ビットの転送にも使われます.MPUが直接64Kバイトのメモリーにアクセスするためには,16ビットのアドレス指定が必要です.残りの上位の8ビットの指定には,AD8〜AD15が使われます.8085Aは,適当な外部デバイスを選択と「読み込み」と「書き込み」の動作の実行,メモリーとI/Oポートの選択のための制御信号を発生します.8085Aには256のI/O用のアドレスがあります.これらのアドレス(00H〜FFH)は,メモリーの最初の256のアドレスと同一です.これは,8085AのIO/Mピンの出力で区別できます.I/Oポートは,メモリーと同じように扱うことができます.

8085のブロックダイアグラム
8085のブロックダイアグラム

レジスター

レジスターは,MPU の中にある記憶場所みたいなものです.8085 には,8 ビットと 16 ビットのレジスターがあります (図3).8 ビットのレジスターは 8 個(A, B, C, D, E, H, L, フラグ)あり,そのうち 6 個はレジスターペアとして使うことができます.レジスターペア (BC, DE, HL) は,16 ビットのレジスターとして使うことができます.これらのレジスターペアに加えて,8085A は 2 個の 16 ビットレジスター (スタックポインター, プログラムカウンター) があります.

8085のレジスター構成
8085のレジスター構成

アキュムレーター (ACC あるいはAレジスター) は,算術演算や論理演算,データの転送,I/O の命令で使われます.汎用レジスターと呼ばれることもあります.

プログラムカウンター (PC) は,次に実行する命令が格納されているメモリーのアドレスを保持します.8085A のメモリーアドレスしては16ビットなので,プログラムカウンターも 16 ビットです.

BC と DE,HL は汎用レジスターで,命令により 8 ビットレジスターあるいは 16 ビットのレジスターになります.HL レジスターは,命令の操作対象のソース(元)やデスティネーション(目的)のメモリのアドレスを表すデータポインターとして使われます(具体的には,Lesson 8 の HL レジスターを使っている命令を参照してください).少ないですが,BC あるいは DE レジスターを間接アドレッシングに使う命令もあります.

スタックポインター (SP) は,スタックのトップ (次に利用可能なスタックのアドレス) を示す特別なデータポインターです.16 ビットのレジスターで8ビットに分割することはできません.アドレスを表すため,必ず 16 ビット必要だからです.

8 ビットのフラグレジスターには,5 つの 1 ビットのフラグが含まれています.これらのフラグは,MPU の状態を表し,MPU の動作を制御します.

フラグレジスター

図4に,8085のフラグレジスターの構成を示します.

フラグレジスター
フラグレジスター

桁上げフラグCY(carry flag)は,算術演算命令論理演算命令の結果によって,セットやリセットされます.たとえば,次のような1バイト同士の足し算で桁上げが生じた場合に,桁上げフラグCYがセット(1)されます.このフラグを使うことで,演算結果が8ビットに収まらない加算でも正しい結果を得ることができます.

  10101110
+ 01110100
 100100010

加算演算の計算結果が8ビットでオーバーフローした場合,キャリーフラグがセット(CY=1)されます.オーバーフローが起きない場合には,リセット(CY=0)されます.減算演算の場合には,キャリーフラグは「上位の桁からの借り(ボロー)」になります.下の左側の例は,減算される数(10101110)よりも減算数(01110100)の方が大きいので,「上位の桁からの借り」は生じませんので,CY=0となります.一方,右側の例では借り(赤字)が生じますので,CY=1となります.

  10101110  101110100
- 01110100 - 10101110
  00111010   11000110

ACフラグは,ビット3が桁上げや上位桁からの借りが生じた場合に,セット(AC=1)されます.キャリーフラグ(CY)がビット7で動作したのと同じことが,ビット3で起きます.このACフラグは,10進数演算の時に使います.

演算結果の正負を表すサインフラグ (S) は,算術演算命令論理演算命令の実行結果が格納されるアキュームレーター (Aレジスター) の最上位ビットがセットされます.整数を 2 の補数で表すシステムでは,最上位ビットが 1 になると,その整数は負として取り扱われます.したがって,アキュームレーターの最上位ビットを調べることで演算結果の正負が分かります.コンピューター内部での負の整数の表現については,私の講義ノート「負の整数の表現」を参照ください.

ゼロフラグ (Z) は,アキュームレーター (Aレジスター) の全てのビットがゼロの時,セット (Z=1) されます.反対にどれかのビットが 1 の時,クリアー (Z=0) されます.+1 加算命令 (INR) や -1 減算命令 (DCR) の結果にも,ゼロフラグは反映されます.

アキュームレーター (Aレジスター) のビットの1の数が偶数の場合,パリティフラグ (P) がセット (P=1) されます.偶数の場合,クリアー (P=0) されます.

スタックポインター

スタックポインターは,スタックの最上位のアドレスが格納されます.スタックは,メモリー(RAM)の一部を使い,データの格納(PUSH)とデータを取り出し(POP)を行います.初期化時には,使用可能なメモリー最大の番地(最下位番地)をスタックポインターの値とします.スタックにデータがプッシュ(PUSH)されるとスタックポインターの値は減らされ,ポップ(POP)されると増やされます(スタックは,メモリーの下位から上位に向かって伸びます).スタックには,常に2バイトずつデータが格納されるので,スタックポインターは2ずつ増減します.

演算論理装置(ALU)

ALUには,アキュームレーターやフラグレジスター,プログラマーがアクセスできないいくつかのテンポラリーなレジスターが含まれます.算術演算や論理演算,ローテート演算は,ALUによって実行されます.それらの演算結果は,アキュームレーターに格納されるか,他の場所で使うために内部のデータバスに送られます.

命令レジスターとデコーダー

フェッチサイクルの間,命令の最初のバイト(オペコードを含んでいる)は,内部バスを通して8ビットの命令レジスターに送られます.つぎに,命令レジスターの内容は命令デコーダーが使います.タイミング信号によって発生させられるデコーダーの出力は,レジスターとALUとデータとアドレスバッファーを制御します.命令レコーダーと内部クロック発生器は,ステートとステートとマシンサイクルのタイミング信号を発生します.

ピンアサイン

8085のピン
8085のピン

回路の説明

テスト順序

ページ作成情報

参考資料

  1. OKIセミコンダクタ株式会社のMSM80C85AHRS/GS/JSのデータシート.8085のデータシートいろいろ探しましたが,OKIのものが結構詳しかったので参考にしました.
  2. 鈴木哲哉著の「古典電脳物語」は大変参考になります.8085の詳しい説明があり,ハードからソフトまでマイコンの作り方がかかれています.
    古典電脳物語―8085,Z80,CP/M,タイニーBASIC…古典電脳物語―8085,Z80,CP/M,タイニーBASIC…

    ラトルズ 2006-07
    売り上げランキング : 134755

    Amazonで詳しく見る
    by G-Tools
  3. UNIXシステム(Linuxも動作可)で動作する8085のエミュレーター EZ8085.動作を確認するときに,エミュレーターがあれば大変便利です.

更新履歴

2010年01月10日 ページの新規作成


no counter