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

●INR B命令のクロック毎の動作の写真です

今回は、[第71回]のあと、中断したままになっていた、INR、DCR命令のクロックごとの動作の説明を再開いたします。
[第71回]では、LXI B,7FFFを実行したところまで説明をしました。

LXI命令によって、Bレジスタには”7F”が入り、Cレジスタには”FF”が入りました。
”7F”は符号付の2進数でも符号無しの2進数でも、十進数の127になります。
”FF”は符号付の2進数なら十進数の−1になります。符号無しの2進数なら255になります。
符号付、符号無しの2進数については[第14回]で説明しました。

INR B命令の実行によって、Bレジスタの値は+1されます。
”7F”は”80”になります。
”80”は符号付の2進数では”−128”ですが、符号無しの2進数なら128になります。
INR B命令の実行によって、S(サインフラグ)はどうなるでしょうか?
今回はフラグの変化もあわせて見ていくことにします。

例外を除いては、T0〜T3のOPコードフェッチサイクルは、どの命令もみな同じ動作なので、T0〜T3は省略して、T4からお見せします。

T4の写真です。


今回お見せするINR命令の写真は、[第71回]で説明したLXI B命令の写真と同じときに撮影したものなので、まだPC(プログラムカウンタ)の上位8ビットのLEDは追加されていません。その他いくつかのLEDがまだ追加されていません。

OPコードレジスタにはINR BのOPコード、”04”がラッチされています。
regRDが点灯していて、s3−s0が”1000”なのでBレジスタが選択されて、BregRDが点灯しています。
Bレジスタの値”7F”が内部データバス(innerBUS)に出力されています。

右側の2枚目の基板の中ほど上部にINR/DCRレジスタがあります(面倒なので、以後はINRレジスタと呼ぶことにします)。
INRregUPが点灯しています。ここが点灯しているときがINRです。消灯しているときはDCRです。INRレジスタ74HC191のpin5(D/U)への入力信号を表示しています。
ちょっと暗いですけれど、INRregWRが点灯していて、INRレジスタが筒抜けになって、内部データバスの値”7F”がINRレジスタに読み込まれています。

T5の写真です。


INRregclkが点灯しました。
INRregUPは点灯していますが、INRregWRは消灯しました。

T6の写真です。


INRregclkが消灯し、INRレジスタが+1されて”80”になりました。
INRregRDが点灯して、内部データバスにINRレジスタの値”80”が出力されています。
regWRが点灯して、d3−d0が”1000”なので、Bレジスタが選択され、BregWRが点灯しています。
Bレジスタが筒抜けになって、内部データバスの値”80”が読み込まれています。

T7の写真です。


regWR、BregWRが消灯して、Bレジスタに”80”がラッチされました。

T8(次の命令のT0)の写真です。


最後のT8は一瞬で終了し、次の命令のT0になります。

●また回路にミスがみつかりました

右側の2枚目の基板の右上方にフラグレジスタがあります。
今回は設定が悪くて(気がつきませんでした)、S(サイン)フラグが最初から点灯したままでした。
Bレジスタに”7F”が入っていて、INR B命令を実行した結果、”80”になったので、S(サイン)フラグが点灯しますが、これではINR B命令の実行の結果、S(サイン)フラグが点灯したのか、それとも回路が機能していなくて点灯したままになっているのか、わかりません。

S(サイン)フラグよりも問題なのはH(ハーフキャリー)フラグです。
”7F”に+1された結果、”80”になったので、当然ビット3からキャリーが出たはずです。
でも、H(ハーフキャリー)フラグは消えたままです。

●INRレジスタの回路図を修正します

回路図を調べてみたところ、うっかりミスがみつかりました。
[第58回]でお見せした「INRレジスタの回路図」のRSフリップフロップの入力部分にインバータが落ちていました。
その部分の修正後の回路図です。


T0パルスでRSフリップフロップをリセットするつもりなのに、インバータを忘れたために、逆に「T0以外は」リセットされっぱなしになっていました。
インバータに74HC04を使わないで、74HC05を使ったのは、基板上に空いている74HC04が無かったから、というだけの理由です。

●INR、DCRの回路図も変更します

ことのついでに、INR、DCR命令の回路図([第59回])も変更します。
変更(正しくは”追加”)するのは、M(HLで指定するメモリアドレス)に対するINR、DCR命令の回路です。

メモリに対するWRITEは、[第45回]でRSフリップフロップを使って、regWR信号からdataOUTとHLselを作り出すようにしたため、レジスタに対する書き込みでも、メモリ(M)に対する書き込みでも、regWRの出力だけでよいことになりました。

ところがその後、[第72回]で、RSフリップフロップ回路を外してしまいました。
いままではHLselもdataOUTも気にしなくてよかったのですが、RSフリップフロップ回路を外してしまったため、それが必要な命令回路では、HLsel出力とdataOUT出力が必要になりました。

追加変更後のINR、DCR回路図です(部分のみを示します)。


今回の回路図の変更結果の検証も兼ねて、次回はもう一度INR、DCR命令をクロック毎に実行してみます。

●またメールで教えていただきました

メールで8080Manualを添付していただいた皆川様から、またメールをいただきました。
今回は8080Manualの置いてあるサイトの情報を教えていただきました。
下のサイトです。
http://www.datasheetarchive.com/

Search for:の窓に、8080 と入力してSearchボタンをクリックすると、スポンサーリンクの下の方に検索結果が10件ずつ表示されます。リストの最後28番目に、お目当てのIntel8080User’sManualがあります(08年9月25日現在)。
かなり大きいファイルです(5.8MB)。

おかげさまで、User’sManualを完全な形でdownloadすることができました(230pageもありました)。
貴重な情報を教えていただいた皆川様に感謝申し上げます。本当に有難うございました。


Intel社「8080Microcomputer Systems User’s Manual September 1975」表紙

2008.9.25upload

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