トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第262回]
●CFとZFのLED表示/ADD A,dのテスト
[第259回]でCF(キャリーフラグ)のLED表示があるとよいのだけれど…、と書きました。
MYCPU4にはCFのほかにZF(ゼロフラグ)もあります。
基板にスペースがなくてちょっと難しいのですけれど、やっぱりあったほうがいいですねえ。
ということでとりあえずは後付けでLEDを追加しました。

IC13(74HC74)の右上と右下の赤色LEDです。
その部分を拡大しました。

上側がCFで、下側がZFです。
その部分の回路図です。

CFもZFもそれぞれONのときにLEDが点灯、OFFのときに消灯します。
ここまでやってしまったからには諦めてもう一度基板を作り直すことにします。
どうせ[第260回]で書きましたように内部バスラインにプルダウン抵抗を追加しなければならないので、そのついでです。
CFとZFにLEDをつけたので念のためにその動作テストをしておくことにしました。

CFとZFの点灯、消灯の確認です。
テストプログラムをRAMに書いて、書き込み後のベリファイをしたあと、MYCPU4にリセットをかけました。
最初の命令LD A,1000のCLK1で停止している状態です。

LD A,dは[第259回]で説明していますから、説明は省略します。
LD A,1000のCLK4までステップを進めました。

LD A,1000のCLK4の写真です。

Aレジスタに1000が書き込まれました。
次の命令ADD A,1000のテストです。

ADD命令は[第260回]で説明をしました。
そのときはADD A,Bでした。
今回もせっかくテストでADD命令を使うのですから、今度はADD A,dを使ってみることにしました。
CFとZFのテストを兼ねてADD A,d命令のテストをすれば一挙両得です。
ADD A,1000の1マシンサイクルを実行しました。
ADD A,1000(マシン語コード01101000)のCLK1の写真です。

ADD A,dもADD A,Bと基本的には同じですから説明は簡単に済ませます。
今回はBレジスタではなくてd(外部データ定数)ですからBdselが点灯しています。
Bdselはdが選択されたときに点灯します。
Aレジスタの1000と外部データの1000を加算しますからALUにはその結果の値0000が表示されています。
同時にCFとZFもALU回路から出力されているのですが、まだラッチされていないので両フラグともLEDは点灯していません。
次のCLK2の写真です。

ALUwrが点灯しました。
CLK3の写真です。

ALUoutが点灯しました。
同時にCFとZFが点灯しました。
1000+1000の結果は0000になって上位桁へのキャリーが発生します。
ALUの値は0000なのでゼロフラグが立ちます。
Awrも点灯していますが、この時点ではまだAレジスタにはALUの値は書き込まれません。
CLK4の写真です。

Aレジスタが0000になりました。
CFとZFは次にフラグを変化させる命令が実行されるまで現在の状態を維持します。
次の4ステップ(1マシンクロック)を実行しました。

次も同じADD A,1000の実行です。
CLK1の写真です。

CLK2の写真です。

CLK3の写真です。

0000+1000の加算ですから結果は1000になってCFもZFも消灯しました。
CLK4の写真です。

Aレジスタが1000になりました。
最後の命令HLTを実行しました。

CLK1の写真です。

CLK3の写真です。

トランジスタでCPUをつくろう![第262回]
2020.11.10upload
前へ
次へ
ホームページトップへ戻る