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

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第272回]



●動作テスト(15)JNZ d

今回はJNZ dのテストです。
HCMOSIC版MYCPU4の命令の動作テストとしてはこれが最後になります。
いつものように画面左側のプログラムを実行したあとでマシン語モニタコマンドでステップ動作をさせています。
そのあたりの操作については[第258回][第259回]で詳しく説明していますので参照してください。
また以下の説明に出てくるHCMOSIC版MYCPU4基板のLED信号名についても[第259回]で説明していますので参照してください。

SUB A,BのCLK4まで実行しました。

LD A,d、LD B,d、SUB A,Bはすでに説明済みですから各CLKのときの状態の写真は省略します。
最後のSUB A,BのCLK4のときの写真のみ下に示します。

Aに3、Bに5をロードしてSUB A,Bを実行しましたからAレジスタには結果の値のEが入りました。
Eは負号なし数では14ですが符号付の数として考えたときは−2になります(2の補数)。
3−5の計算では上位桁に対するボローが発生しますからCFがセットされます(赤色LEDが点灯しています)。
結果は0ではありませんからZF(下側の赤色LED)は消灯しています。
CFとZFのLED表示については[第262回]に書いていますので参照してください。

次のJNZ 5を実行しました。

JNZ 5のCLK4まで実行しました。
その直前の状態ではZFは立っていませんからJNZ 5の実行によってPC(プログラムカウンタ)にはアドレス5がセットされるはずです。

JNZ 5のCLK1の写真です。

JNZの動作は基本的にはJMP命令の動作と同じです。
写真左上のDECODE基板のBdsel(青色LED)が点灯しました。
Bdselが点灯すると外部データが選択され、消灯するとBレジスタが選択されます。
Bdoutも点灯しています。
写真右上のREGISTER基板のB/d(D3〜D0)に外部データの値(0101)が出力されています。
内部バスにも0101が出力されています。
DECODE基板のPCwr_(赤色LED)も点灯しています。
JNZのCLK2〜CLK4はCLK1と同じで変化しませんから写真は省略します。

JNZ 5の次の命令の1CLKだけを実行しました。


JNZ 5の次の命令の1CLKだけを実行したときの写真です。

メモリアドレスが05(00000101)になりました。
JNZ 5が正しく実行されたことが確認できました。
しかしそれだけではJNZ命令のテストとしては不十分です。
ZFが立っているときの動作も確認する必要があります。

ZFが立つようにAレジスタの値を変えました。

さきほどのテストと同じようにSUB A,BのCLK4まで実行しました。

最後のSUB A,BのCLK4のときの写真です。

Aに5、Bにも5をロードしてSUB A,Bを実行しましたからAレジスタには結果の値の0が入りました。
今回の計算では上位桁に対するボローは発生しませんからCFはセットされません(赤色LEDは消灯しました)。
結果が0ですからその下のZF(赤色LED)が点灯しました。

次のJNZ 5を実行しました。

JNZ 5のCLK4まで実行しました。
その直前の状態でZFが立っていますからJNZ 5は動作としてはNOP命令の動作になってPC(プログラムカウンタ)が+1進むだけの結果になるはずです。

JNZ 5のCLK1の写真です。

さきほどと違ってDECODE基板のPCwr_(赤色LED)は消灯しています。
JNZのCLK2〜CLK4はCLK1と同じで変化しませんから写真は省略します。

JNZ 5の次の命令の1CLKだけを実行しました。


JNZ 5の次の命令の1CLKだけを実行したときの写真です。

メモリアドレスは1カウント進んで04(00000100)になりました。
ZFが立っているときのJNZ 5も正しく実行されたことが確認できました。

トランジスタでCPUをつくろう![第272回]
2020.12.1upload

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