トランジスタで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
前へ
次へ
ホームページトップへ戻る