標準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
前へ
次へ
ホームページトップへ戻る