標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第218回]

●RST命令の説明の続きです

今回はRST命令の説明の続きです。
RSTはRestartです。

RSTのうちでも、とりわけRST 7(命令コードはFF)は、8080のINT(interrupt、割り込み)に特化して使われることが多いようです。
8080の割り込みは、割り込み信号がCPUに受けつけられたときに、外部からデータバスに8ビットの命令を割り込ませることで、割り込み処理を行います。
しかし、8ビットの1命令を実行させたところで、何かができるわけではありません。
当然、何バイトか何十バイトかの、割り込み処理プログラムを実行させて、はじめて割り込み処理といえる程度の処理が行えることになります。
8080では、割り込み発生時に、割り込み処理プログラムへのジャンプを行うための命令として、このRST命令が利用されます。

しかし、RST(Restart)というネーミングは、割り込み用の命令というよりも、例外処理のための、ホットスタート(ウォームスタート、ウォームブートなどとも言います)のための命令である、ということを推測させます。
開発者の意図がどこにあったのかはわかりません。

実際、割り込みコントローラなどを使わないで、INT信号のみで行う割り込みには、RST命令(もっとはっきりRST 7命令と言いきってしまってもよいと思います)が必要不可欠です。
多分、例外処理のためと、割り込みのための、両用に考えられたのかもしれません。

用途はともかく、RST命令は、アドレス0000〜0038へのCALL命令として機能します。
CALL命令ですから、まずこの命令の次のアドレス(現在プログラムカウンタに入っているアドレス)を、スタックポインタに格納します。
そして、CALLするアドレス0000〜0038をプログラムカウンタにセットします。
そうすることで、次に実行されるアドレスが0000〜0038になります。
それほど難しい動作ではありません。
タイミングチャートを見てみましょう。

●RST命令のタイミングチャートです

M2のときにs3〜s0=”0010”にしてregRDをアクティブにします。
s3〜s0=”0010”はPCH(プログラムカウンタの上位バイト)です。
PCHの値が内部データバスに出力されます。
M3のときにs3〜s0=”0011”にしてregRDをアクティブにします。
s3〜s0=”0011”はPCL(プログラムカウンタの下位バイト)です。
PCLの値が内部データバスに出力されます。

タイミングチャートには描かれていませんが、M2、M3の期間、dataOUT信号がアクティブになって、内部データバスの値が、外部データバスD0〜D7に出力されます。

その前のT3のときにSPclkにクロックを与えて、SP(スタックポインタ)の値を−1します。SPd/u=1はダウンカウント指定です。
T5のときにもSPclkにクロックを与えて、SPをさらに−1します。
M2、M3の期間、SPselをアクティブにして、SPの値を外部アドレスバスA15〜A0に出力しておいて、T4、T6でMEMWRをアクティブにします。
そうすることでSPで指定するメモリアドレスにPCの値が書き込まれます。

次のM4で、d3〜d0=”0011”にして、PCL(プログラムカウンタの下位バイト)をセレクトします。
内部データバスに00〜38のいずれかの値を、RST命令の命令コードをもとに設定して、PCLに書き込みます(T8でregWRをアクティブにします)。
M5でd3〜d0=”0010”にして、PCH(プログラムカウンタの上位バイト)をセレクトします。
内部データバスに00を設定して、PCHに書き込みます(T10でregWRをアクティブにします)。
2009.5.2upload

前へ
次へ
ホームページトップへ戻る