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

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


[第263回]



●動作テスト(6)LD W,A、OUT B、LD A,B、LD A,W

今回はワークレジスタWのテストです。
「トランジスタ技術」2020年5月号特集の4ビットCPUにはWレジスタはありません。
乗算などでAレジスタの値を一時保存したいときはOUTポートとINポートを接続してOUTポートを臨時のワークレジスタとして使うようです。
ま、確かにそれもひとつのアイデアかと思います。
しかし、やっぱりここは正攻法でいきたいと思います。
ということで「中日電工版」4ビットCPUではワークレジスタWを追加することにしました([第251回]の回路図参照)。
問題はWレジスタにアクセスするための命令コードです。
「トランジスタ技術版」4ビットCPU互換という基本線を考えるとそこが苦しいところです。
「互換」にこだわらなければ独自のコード体系でいくことも可能です。
逆に考えればあえて独自のコード体系にしたところでたかが4ビットの命令コードですからいじくり甲斐がないともいえます。
そこで当初の方針通り基本は「トランジスタ技術版」4ビットCPU互換の路線でいきつつ、その中でなんとかWレジスタにアクセスする方法を考え出すことにしました。
そこで考えた結果が[第249回]の「命令DECODE回路真理値表」です。
「トランジスタ技術版」ではLD A,Bの命令コードは0010XXXXで、LD B,Aの命令コードは0011XXXXでともに下位4ビットは未定義のまま空いています。
そこで「命令DECODE回路真理値表」にあるように、ビット0を使って、次のようにしました。
LD A,Bの命令コードは0010XXX0
LD A,Wの命令コードは0010XXX1
LD B,Aの命令コードは0011XXX0
LD W,Aの命令コードは0011XXX1

今回はそのうちLD A,W、LD W,AとLD A,Bの3命令のテストプログラムを作成しました。
ついでにOUT Bもテストします。
テストの要領は今までと同じです。

下は今までと同じようにND80Z3.5の82C55にHCMOSIC版MYCPU4基板を接続してZB3BASICでテストをしている画像です。

まずは左側のBASICプログラムを実行してRAMにテストプログラムを書き込み、そのあとGOTO 160を実行してRAMに正しく書き込めたことを確認しました。
そのあとZB3BASICのマシン語モニタ機能で82C55の初期設定とMYCPU4基板のリセットを行ないました。
下はそこまで実行したときの写真です。


続いて最初のLD A,3を実行しました。

LD A,3のCLK4まで実行しました。

LD A,nはすでにテスト済みですから最後のCLK4のみ写真に撮りました。

Aレジスタに0011が書き込まれました。

次のLD B,5を実行しました。

LD B,5のCLK4まで実行しました。

LD B,nもすでにテスト済みですから最後のCLK4のみ写真に撮りました。

Bレジスタに0101が書き込まれました。

説明の途中ですが時間がなくなってしまいました。
この続きは次回にいたします。

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

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