2. MPUの調査
2.1 68Kのアーキテクチャ
2.1.1 68Kの特徴
68Kには、3つの特徴がある。
第一に、セグメントという概念がない。そのため、常に16Mバイト(224バイト)のメモリ空間を一様にアクセスする事ができる。これは、機器組み込み用のCPUとして大きなメモリ空間があまり問題にならないときに、余計なオーバーヘッドがなく、都合がよい。
第二に、68Kの内部レジスタは全て32ビットになっている。このため、剰余算やアドレス計算が容易に行える。更に、そのレジスタ群は用途についてあまり制限がない汎用レジスタ方式をとっていて、レジスタ間のデータ転送やデータのセーブ・ロードの回数が少なくてすむ。
第三に、68Kはスタックやキューを用いた演算処理ルーチンの記述が容易な命令セットとアドレッシングモードを持っている。これは、CやPascalなどの構造化プログラミング言語の実行に際し、都合がよい。また、汎用レジスタ方式をとっているため、同時に複数個のスタックを管理できる。
2.1.2 68Kのレジスタ群
- アドレスレジスタ(A0〜A7)
- アドレスレジスタは、アドレスベースに使う事を目的としているので、アドレシングモードがたくさん作られている。A0〜A6までがアドレスレジスタ、A7は裏表に分かれていて、それぞれスーパーバイザ用のスタックポインタ(SSP),ユーザ用のスタックポインタ(USP)として使用される。
- データレジスタ(D0〜D7)
- データレジスタは、いわゆるアキュムレータとして使うのに便利にできていて、下から8ビット及び16ビットに切っても使える。(下の8ビットにデータをロードした時、上の24ビットは変化しない。)
- プログラムカウンタ(PC)
- PCは32ビットである。しかし、使用できるのは下位24ビットなので、アドレス空間は16Mバイトである。
- ステータスレジスタ(SR)
- SRは16ビット長で、上位半分はシステムバイト、下位半分はユーザバイトとなっている。システムバイトはシステムの状態を示し、ユーザステートのときはこ内容を書き換えられない。ユーザバイトはZ80のFレジスタのようなものである。
2.1.3 スーパバイザステート・ユーザステート
68KはOSの存在を前提としているため、システムプログラムが資源管理などの操作をすることができるように、実行時の状態がスーパバイザステートとユーザステートに分かれている。
|
Fig 2.1 68kのレジスタ構成 |
- 特権命令
- スーパバイザステートでしか実行できない命令。SRのシステムバイトの変更や、割込み処理に関する命令群。
2.1.4 68Kのデータ型
68Kは、1ビット(ビットデータ)、4ビット(BCDデータ)、8ビット(バイトデータ)、16ビット(ワードデータ)、32ビット(ロングワードデータ)のデータを取り扱うことができる。
- レジスタ
- データレジスタは4種類の長さのデータを全て保持することができる。アドレスレジスタは16ビット又は32ビットを単位として扱う。
- メモリ
- データをメモリに記憶させる場合はワード(2ビット)を単位とする。この際、低アドレス側に上位バイトのデータを、高アドレス側に下位バイトのデータを納める。
2.2 アドレシングモード
2.2.1 オペランドの種類
ソースオペランド・・・データを供給する。
デスティネーションオペランド・・・データを受け入れる。
ソースがデータそのものに注目しているのに対し、デスティネーションは内容だけでなくその場所にも重要性がある。
2.2.2 オペランドの指定
オペランドとして指定されうるものは、各種レジスタとメモリ内の番地である。こういったものをオペランドとして指定する方法はいくつかあり、これらをアドレシングモードと呼ぶ。
オペランドとしてレジスタを使う際には、単にそのレジスタの名前を指定すればよい。メモリアドレスについては、プログラム実行時にいくつかのレジスタや定数を使ってメモリアドレスを計算し、その値をオペラントとして指定することができる。この時の計算をアドレス計算、計算の結果得られたメモリ番地を実行アドレスという。
2.3 インストラクションセット
68Kの持つ命令セットは、次のように分類できる。
2.3.1 算術演算
算術演算には、加減剰余の他に、比較、クリア、ネゲートなどがある。剰余算には符号ありと符号なしの両方が用意されている。これらの演算は、アドレスに対しては、16又は32ビットでデータに対してはすべてのオぺランドサイズで使用できる。
2.3.2 論理演算
論理演算には、AND,OR,EOR,NOTがあり、前三者については即値を使う命令(ANDl,ORl,EORl)がある。アドレシングモードの指定により、これらわSRをデスティネーションとすることができる。
2.3.3 シフト/ローテート
シフトとローテートは、レジスタに対しても、メモリに対しても実行できる。但し、メモリ内のデータに対しては16ビットオペランドで1ビットのシフトに限られる。
2.3.4 ビット操作
ビット操作はビットテストとテストしたビットに対して行う操作との組みである。
- ビットテスト
- 指定されたビットが”0”なら、Zフラグを立てる。
- テスト後の操作
- テスト後の操作には、BTST(何もしない)、BSET(1にする)、BCLR(0にする)、BCHG(反転する)がある。
2.3.5 BCD演算
BCD演算は加減算(ABCD)と符号反転(NBCD)がある。一度に扱えるオペランドサイズは8ビットである。
2.3.6 データ移動
ほとんどのデータ移動に関するプログラムはMOVE命令によって行われる。MOVE命令は、ソース、デスティネーションとも6ビットで指定される。
2.3.7 ジャンプ/コール
ジャンプ・コールには、無条件分岐、条件分岐の2つがあり、他にも手続きの呼び出し、手続きからの復帰がある。
2.3.8 システム制御
システム制御の命令には、特権命令、トラップ命令、及びSRのシステムバイトを操作する命令がある。
2.4 制御用68Kボード
種々のアクチュエータ及びセンサー等をコントロールするために小型基盤上(12cm×12cm)に高密度で実装された小型68Kボードである。同時に、バッテリー駆動を前提としているため、ハイスピードC−MOSを使用した省電力型のボードコンピュータである。
図2に示すように、68KボードはMPUボードとI/Oボードの二枚一組で構成されるI/Oコントロール指向のシステム構成となっている。さらに表1に示す80Pマザーバスコネクタにシステムバスを開放しているため、必要に応じて拡張することが出来る。
本システムのメモリーマップを図3に示す。本システムは、電源オン又は外部リセットにより、ROM領域の先頭番地FC0000から2ワードをそれぞれSSPおよびPCとして取り込み、PCに書かれたメインエントリールーチンのエントリーポイントからプログラムを実行するようになっている。
また、本システムでは、汎用インテーフェースLSI(PI/T及び3個のPIA)を搭載し、各LSIの割込み要求端子を開放して(図4に示すJP1により割り込みレベル選択可、オートベクタ割り込み)、多様なモードでのI/Oコントロールを可能としている。図5〜7に各I/Oコネクタのピン・アサインを示す。
さらに、PI/Tによりタイマ割り込み(レベル5オートベクタ)を可能としている。
|
Fig 2.2 メモリーマップ |
2.5 付録
- アーキテクチャ
- 命令の機能、データの表現機能等の、ハードウェアとソフトウェアの開発に必要となるハードウェアの仕様のこと。
- セグメント
- プログラムが大きくて一度に主記憶に格納できない場合、または主記憶装置を有効に使うためにプログラムをモジュール化する場合に、細分化されるプログラムの各部分。
- オーバーヘッド
- 無駄に費やされる時間または記憶領域。主に、OSが存在している領域や、それが働いている時間をさす場合が多い。
- キュー
- 処理がFIFO(First In First Out)であるデータの集まりの構造。待ち行列ともいう。
- アキュームレータ
- 演算部を構成する主要なレジスタの一つであり、算術演算や論理演算を行うデータを記憶したり、演算の結果を貯えておいたりする場所。
- フェッチ
- CPUが命令を取り出すこと。
- アクノリッジ
- データ通信を行う際に、データが正しく送られたことを、受信側が送信側へ報告すること。