Lesson
7.8085A
Appendix
|
Lesson 7Functinal Description of 8085Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 7 に関するメモです.ここでは,主にIntel社のMPU 8085のハードウェアー構成について学習します(参照:MM=8000のマニュアルのLesson 7).8085の命令は,次のLesson 8で説明します.
目次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ポートは,メモリーと同じように扱うことができます.
レジスターレジスターは,MPU の中にある記憶場所みたいなものです.8085 には,8 ビットと 16 ビットのレジスターがあります (図3).8 ビットのレジスターは 8 個(A, B, C, D, E, H, L, フラグ)あり,そのうち 6 個はレジスターペアとして使うことができます.レジスターペア (BC, DE, HL) は,16 ビットのレジスターとして使うことができます.これらのレジスターペアに加えて,8085A は 2 個の 16 ビットレジスター (スタックポインター, プログラムカウンター) があります.
アキュムレーター (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とデータとアドレスバッファーを制御します.命令レコーダーと内部クロック発生器は,ステートとステートとマシンサイクルのタイミング信号を発生します. ピンアサイン
回路の説明テスト順序ページ作成情報参考資料
更新履歴
|