MC6809



MC6809, by Wikipedia https://ja.wikipedia.org/wiki?curid=2191 / CC BY SA 3.0

MC6809

MC6809は、モトローラが1979年に発売した、8ビットのマイクロプロセッサ。対称性の高い命令体系を持っている点が特徴である。

MC6809は、レジスタには8ビット幅のアキュムレータを2つ(A,B。一部の命令では2つを連結して16ビット幅のアキュムレータ(D)として使用できる)、16ビットのインデックスレジスタを2つ(X,Y)、および16ビットのスタックポインタを2つ持つ(U,S)。インデックスアドレッシングモードにおいては、スタックポインタもインデックスレジスタとして指定できる。

前身となるMC6800とは、アセンブリ言語のソースコードの範囲でニーモニックの互換性は保たれていた。MC6800用アセンブラプログラムからMC6809用バイナリコードを出力するアセンブラでは、自動的に等価な命令に変換する。しかし、バイナリコードでは互換性がない。また、ピン配列に互換性はない。命令数は6800の78に対して6809は59であるが、等価な命令によってカバーできる。

8ビットCPUとしてはライバルとなるZ80よりも後発のアーキテクチャであるが、それゆえによく練られた直交性の高い命令体系が特徴である。高級言語を意識した豊富なアドレッシングモードや乗算命令を持つ、シンプルかつ高性能なプロセッサである。CPU単体でもOS-9によってプリエンプティブなマルチタスクを実現し、またオプションのMMUであるMC6829 MMUを追加することでメモリ空間を最大2MBに拡張すると共にメモリ/プロセス保護も実現可能である。この機能はOS-9 Level2でサポートされる。

動作クロックは80系CPU(8080、Z80)と比較して低いが、二相クロックの利用により1クロックでメモリアクセスが可能である。また、命令の実行に必要なクロック数は、単純に6800と比べると多くなっているが、実際の命令実行では従来複数の命令を要した処理を1命令でこなせるようになり、実行クロック数は実質的に減らせる。例えば「IXレジスタで示されるメモリからAレジスタに値をロードし、その後IXレジスタをインクリメント」する処理をMC6800では、ロード命令とインクリメント命令の2命令で行っていたのに対し、MC6809ではオートインクリメント付きインデックスドアドレッシングのロード命令という1つの命令で実行可能である。
また、MC6800ではレジスタの少なさをカバーするダイレクトページアドレッシングモードを持ち、0~255番地のメモリへのアクセスを高速に行う事が出来たが、MC6809ではその機能を継承したうえで、DPレジスタを追加し、高速にアクセスできる256バイトの領域を変更することが可能である。これらの特徴により、MC6800に対し最高5倍の処理能力を持ち、当時の8ビットCPUの中では最も高速である。

MC6809は、PC相対アドレッシングモードや、64KBの全アドレス空間をカバーする相対ジャンプ命令を利用して、位置独立なプログラムを作製する事が容易である。また、スタックポインタを使ったアドレッシングモードも充実しており、ローカル変数をスタック上に確保する事で、再入可能(リエントラント)なコードの記述を容易に行える。位置独立で再入可能なプロシージャを作成すると、そのバイナリ実行形式コードをメモリ空間の空いた領域に置くことで、リンカやローダによる書き換え処理を行う事無く直ちに利用可能になる。組み込みシステムの開発において、この特徴は利便性を発揮した。MC6809の特徴を生かしたオペレーティングシステムであるOS-9を設計するにあたって、コードは位置独立で、再入可能であることが要求された。

このような背景から、登場当時の月刊アスキー誌上では「究極の8ビットCPU」と紹介された。

MC6809には、クロック周波数が1MHzの6809、1.5MHzの68A09、2MHzの68B09があり、それぞれにクロックジェネレータを内蔵した版と、外部からクロックを入力する版があり、計6つのバリエーションが存在することになる。クロックジェネレータの種類は型番の末尾で区別し。アルファベットの無い型番(例 MC6809)はクロックの4倍の周波数の水晶発振子を接続し、内蔵したジェネレータで1/4に分周して使用する。末尾にアルファベットEのある型番(例 MC6809E)は、外部で生成した2相クロックを入力する。

モトローラから発売されたオリジナル品に加え、セカンドソース品が存在する。日本では主に日立製作所と富士通によるものが流通した。…

Comments

Copied title and URL