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

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


[第268回]



●動作テスト(11)OUT d、IN A、JMP d(その2)

前回からの続きです。
前回はIN A命令のテストの途中でテストになっていないことに気付いたところで終ってしまいました。
どうしようか考えたのですがせっかく途中までテストをしたことですし、ここでテストを中止してまた最初からやり直すのもなんだかなあという感じです。
そこでIN A命令のテストについてはあらためて行なうことにして、その続きからテストを継続することにしました。
前回IN A命令を終ったところからの続きです。

JMP 9を実行しました。

JMP 9のCLK4まで実行しました。

JMP 9のCLK1の写真です。

写真左上のDECODE基板のBdsel(青色LED)が点灯しました。
Bdselが点灯すると外部データが選択され、消灯するとBレジスタが選択されます。
Bdoutも点灯しています。
写真右上のREGISTER基板のB/d(D3〜D0)に外部データの値(1001)が出力されています。
内部バスにも1001が出力されています。
DECODE基板のPCwr_(赤色LED)も点灯しています。

あれ?
この段階でPCwr_がアクティブになってもよいのか?
さては設計ミスか?
ちょっと気になって確認してみたのですがPCwr_についてはこれで間違いではありませんでした。
PCwr_については後ほど説明をします。
JMP 9のCLK2〜CLK4はCLK1と同じで変化しませんから写真は省略します。

JMP 9の次の4CLKを実行しました。


JMP 9の次のCLK1の写真です。

メモリアドレスが00001001になっています。
JMP 9が正しく実行されたようです。

HCMOSIC版MYCPU4のPC(プログラムカウンタ)には74HC161を使っています。
74HC161のデータLOADはクロックの立ち上がりに同期して行なわれます。
その部分の回路図は[第251回]にあります。
74HC161のCKにはMCK_が入力されています。
MCK_の立ち上がりで74HC161の出力がカウントアップされます。
MCK_については[第254回]で説明しています。
JMP命令は命令のデータ部をPCに書き込むことでアドレスを変更します。
メモリから出力されているデータをPCに書き込むとメモリアドレスが変わりますからメモリから出力される命令もデータも変わってしまいます。
これは入力と出力をつないだ順序回路です。
ちょっと考えると不可能なような気がしますがそれを可能にしているのはメモリから出力されるデータの遅れ時間です。
もし回路に遅れが全くなければこの回路は成り立ちません。
幸いメモリ出力には十分な遅れ時間があります。
最初にJMP命令がメモリから出力された時点ではMCK_はすでに立ち上がっていますからPCwr_がアクティブになっても問題はありません。
PCwr_がJMP命令のCLK1からアクティブになっているのはそのように考えたからです(などと書きましたがそんなことなどすっかり忘れてしまっていました)。
次のMCK_の立ち上がりのときにPCwr_がHならば普通にPCがカウントアップします。
MCK_の立ち上がりのときにPCwr_がLならばPCにデータバスの下位4ビットがロードされます。
それによってメモリアドレスが変わりますが、そのときにはMCK_はすでに立ち上がっていますからメモリからの出力が遅れてまだPCwr_がアクティブのままでもPCに影響はありません。

ということでJMP 9の次のCLK1は上の写真の通りアドレス00001001のSUB A,8になっています。
これでJMP 9が正しく実行できたことが確認できていますが、念のためその続きの写真もお見せします。
SUB A,dについてはすでに説明済みですから説明は省略します([第266回]参照)。

SUB A,8のCLK2の写真です。


SUB A,8のCLK3の写真です。


SUB A,8のCLK4の写真です。


最後のHLTを実行しました。


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

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