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

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


[第384回]



●MMUが働きません

前回は全ての動作テストをクリアしました、と書きました。
今回はクリアする前に苦闘した内容についてのお話です。
当記事は私の備忘録を兼ねています。
うまく動作しなくて悩んであれこれ試行錯誤したことについては、回路図の端にメモ書きしたりしてかなりいい加減な記録しか残らないことが多いです。
それをそのままにしておくと、しばらく経つともう何がどうだったかさっぱりわからなくなってしまいます(メモ書きした回路図を捨ててしまってあとから悩むなんてことも再々あります)。
そういうことなのでまだ記憶の新しいうちにこうしてホームページ記事として整理しておくと後から私自身が重宝します。
ですからこの問題もすでに解決済みなのですが、時間をさかのぼって書いています。

前回書きましたようにプリントパターンの断線や抵抗の不良などのために途中でかなり足踏みして悩みましたがそのあたりの問題がクリアできたあとは動作テストも順調に進みました。
このまま無事にテスト完了かと思ったところ[第274回]のテストまできて、そこでこけてしまいました。
MMUのテストです。
普通のJMP命令についてはすでにテストをしてクリアしています。
ところがMMU回路から出力されるJMP命令が正しく実行されません。
何回テストしてもあらぬアドレスに飛んでしまいます。
普通にRAMから出力されるJMP命令(のコード)とMMU回路から出力される命令コードとの間に何かしら相違があるようです。

もちろんHCMOSIC版MYCPU4では正しく実行されます。
それがなぜトランジスタ回路では正しく実行されないのか?
しかしトランジスタ回路でもRAMから出力されたJMP命令コードは正しく実行されます。
一体なぜなのか?
最初は一見矛盾しているような結果になることが理解できずにかなり悩みましたが、MMU回路の回路図をながめているうちに、「そういうことか!」と合点しました。
それについて説明するためにはまずJMP命令の動作と、そのための回路について説明をする必要があります。

JMP命令はPC(プログラムカウンタ)にJMP先アドレスを書き込むことで強制的にPCの出力を変更します。
その結果として指定するメモリアドレスにジャンプすることになります。
PC回路については[第368回][第374回]でざっと説明をしました。
その時点ではPCにデータを書き込むための回路(PCWR回路)についてはあえて説明しませんでした。
説明が複雑になってPCの基本的な動作が理解しにくくなることを避けるためでした。
しかし今回のJMP命令の動作を理解するためにはPCWR回路について説明をしなければなりません。

●PC(プログラムカウンタ)WR回路

下はPC本体の回路図です。

これだけでPCの1ビット分です。
PCは4ビットですからこの回路と同じ回路が4つあります。
PC本体の回路図は[第369回]でお見せしました。
そのときの回路図とは一部異なっています。
こちらの回路図が最終的な回路図です。
[第369回]の回路図ではPCWR回路(PCWRL、PCWRHの信号が入力されている[2]の回路)からの出力が[1]の回路(CKup信号回路)の出力とつながって[3]のラッチ回路に入っています。
それに対して今回の回路ではPCWR回路([2]の回路)からの出力が[4](CKdn信号回路)の出力とつながって[5]のラッチ出力回路に入っています。
CKupL、CKupH、PCWRL、PCWRH、CKdnL、CKdnHの各信号はPC制御回路から出力されます。
PC制御回路は[第373回]で説明しました。
下がそのときお見せした回路図です。

そこではPCWR信号回路については説明をしませんでした。
今回はそれを含めて(というよりPCWR回路を中心に)説明をします。

説明が長くなってしまいますのでこの続きは次回にすることにします。

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

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