トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第271回]
●動作テスト(14)JNC d(その2)
今回も前回に続いてJNC dのテストです。
前回はSUB A,BのあとでJNC dを実行しました。
JNC dの動作テストとしてはそれで良かったのですが、実はSUB A,Bの代わりにADD A,Bを使ったテストも行ないました。
JNC命令はCFが立っているか立っていないかによって分岐するかしないかの動作が分かれる命令ですから、その前に実行された命令がSUBであってもADDであっても同じ動作になるはずなのですが、まあ、せっかく動作テストをしてその写真も撮ったことですので参考までに以下に掲載することにいたしました。
いつものように画面左側のプログラムを実行したあとでマシン語モニタコマンドでステップ動作をさせています。
そのあたりの操作については[第258回]と[第259回]で詳しく説明していますので参照してください。
また以下の説明に出てくるHCMOSIC版MYCPU4基板のLED信号名についても[第259回]で説明していますので参照してください。
ADD A,BのCLK4まで実行しました。
LD A,d、LD B,d、ADD A,Bはすでに説明済みですから各CLKのときの状態の写真は省略します。
最後のADD A,BのCLK4のときの写真のみ下に示します。
Aに5、Bに9をロードしてADD A,Bを実行しましたからその計算は5+9=14なので上位桁へのキャリーは発生しません。
Aレジスタには演算結果の値の14(E)が入りました。
キャリーは発生しませんからCF(赤色LED)は消灯しています。
CFとZFのLED表示については[第262回]に書いていますので参照してください。
次のJNC 5を実行しました。
JNC 5のCLK4まで実行しました。
その直前の状態でCFは立っていませんからJNC 5の実行によってPC(プログラムカウンタ)にはアドレス5がセットされるはずです。
JNC 5のCLK1の写真です。
JNCの動作は基本的にはJMP命令の動作と同じです。
写真左上のDECODE基板のBdsel(青色LED)が点灯しました。
Bdselが点灯すると外部データが選択され、消灯するとBレジスタが選択されます。
Bdoutも点灯しています。
写真右上のREGISTER基板のB/d(D3〜D0)に外部データの値(0101)が出力されています。
内部バスにも0101が出力されています。
DECODE基板のPCwr_(赤色LED)も点灯しています。
JNCのCLK2〜CLK4はCLK1と同じで変化しませんから写真は省略します。
JNC 5の次の命令の1CLKだけを実行しました。
JNC 5の次の命令の1CLKだけを実行したときの写真です。
メモリアドレスが05(00000101)になりました。
JNC 5が正しく実行されたことが確認できました。
次はCFが立ったときのJNCのテストです。
CFが立つようにAレジスタの値を変えました。
さきほどのテストと同じようにADD A,BのCLK4まで実行しました。
最後のADD A,BのCLK4のときの写真です。
Aに8、Bに9をロードしてADD A,Bを実行しました。
8+9=17ですから4ビットではオーバーフローして上位桁に対するキャリーが発生します。
Aレジスタには下位桁の結果の値の1が入り、CF(赤色LED)が点灯しました。
次のJNC 5を実行しました。
JNC 5のCLK4まで実行しました。
その直前の状態でCFが立っていますからJNC 5は動作としてはNOP命令の動作になってPC(プログラムカウンタ)が+1進むだけの結果になるはずです。
JNC 5のCLK1の写真です。
さきほどと違ってDECODE基板のPCwr_(赤色LED)は消灯しています。
JNCのCLK2〜CLK4はCLK1と同じで変化しませんから写真は省略します。
JNC 5の次の命令の1CLKだけを実行しました。
JNC 5の次の命令の1CLKだけを実行したときの写真です。
メモリアドレスは1カウント進んで04(00000100)になりました。
CFが立っているときのJNC 5も正しく実行されたことが確認できました。
トランジスタでCPUをつくろう![第271回]
2020.11.29upload
前へ
次へ
ホームページトップへ戻る