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

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


[第287回]



●KEYSW回路基板

これまでKEYSW回路基板については説明していませんでした。
昔ながらのスイッチパチパチの基板です。
MYCPU4でもRAMに命令コードを書き込むためのボードとしてセットに含まれています。
回路図は[第257回]でお見せしました。
アドレススイッチとデータスイッチを使ってRAMに1バイトずつ命令コードを書き込みます。
今まではずっとND80Z3.5に接続してZB3BASICプログラムでRAMに書き込んできました。
そのほうが便利なのでそうしてきたのですが、ND80Z3.5がなくても今回説明するKEYSW回路基板を使ってRAMに書き込むことができます。
下がNED80Z3.5の代わりにKEYSW回路基板を接続している写真です。

今までND80Z3.5の82C55入出力コネクタに接続していたRAM/CLOCK回路基板の26pinフラットケーブルコネクタにND80Z3.5の代わりにKEYSW回路基板を接続します。
ND80Z3.5と接続するときは+5V電源はND80Z3.5の82C55入出力ケーブルから供給されますが、ND80Z3.5と接続しないときはMEM/CLOCK回路基板上の電源ジャックに+5V電源を接続して使います。

KEYSW回路基板を接続してRAMに命令コードを書き込むときはRUN/BUSRQスイッチをBUSRQ側にします。

そうすることでKEYSWからRAMにアクセスできるようになります。

RUN/BUSRQスイッチ部分を拡大しました。


ND80Z3.5の代わりにKEYSW回路基板を接続するときはもう一箇所設定が必要です。

MEM/CLOCK回路基板のSP2のKEYSW側にジャンパピンをセットします。
SP2は基板左端、IC3の左側にあります。

その部分を拡大しました。

ND80Z3.5と接続するときは82C55側にジャンパピンをセットするかジャンパピンをセットしないで開放した状態にします。
しかしKEYSW回路基板を接続するときは必ずSP2のKEYSW側にジャンパピンをセットする必要があります。

ND80Z3.5と接続したときと同様、RAMに命令コードを書き込むときはSP1はSTEPにジャンパピンをセットします。


以上でRAMに命令コードを書き込む準備ができました。
操作例として[第259回]で説明したテストプログラムを書き込んでみます。
下のプログラムです。

アドレス 命令コード ニーモニック
00    03      LD A,3
01    15      LD B,5
02    40      ADD A,B
03    80      OUT A
04    F0      HLT

KEYSW回路基板の上側の8個のスイッチがアドレススイッチです。
下側の8個がデータスイッチです。

プログラムのアドレスの順に書き込まなければならないという制約はありませんが普通はアドレスの順に操作します。
最初はアドレス00(2進数では00000000)ですからアドレススイッチは全部下側にします。
スイッチを下側にすると0、上側にすると1が入力されます。
命令コードは03(2進数では00000011)ですからデータスイッチは右側の2個のみが上側、残りは下側にします。
そのようにスイッチを操作するとMEM/CLOCK回路基板のアドレス表示LEDはアドレススイッチの通りの表示(この場合には全部消灯)になりますが、データ表示LEDはそのときにRAMに書き込まれているデータとぶつかるため必ずしもデータスイッチと同じ表示になるとは限りません。
上の写真では右端の2個のLEDが点灯してデータスイッチと同じ表示に見えますがRAMのデータとぶつかっているため表示がやや暗いです。

スイッチをセットした状態でKEYSW回路基板の右下にあるMEMORY WRITEスイッチを押します。

これでスイッチの通りのデータがRAMに書き込まれました。
先ほどの写真と比べると右端の2個のLEDの明るさが増したことがわかります。

以下同様の操作で命令コードを書き込んでいきます。
操作方法は上で説明した通りですので以下は簡単に書きます。
また写真はアドレス、データスイッチをセットしてMEMORY WRITEスイッチを押したあとの状態を撮影しています。

アドレス01(2進数では00000001)に命令コード15(2進数では00010101)を書き込みました。


アドレス02(2進数では00000010)に命令コード40(2進数では01000000)を書き込みました。


アドレス03(2進数では00000011)に命令コード80(2進数では10000000)を書き込みました。


次はアドレス04(2進数では00000100)に命令コードF0(2進数では11110000)を書き込みますが最初のアドレス00のところで説明したのと同じように書き込み前のRAMのデータとぶつかっていることがよくわかる状態になりましたので、MEMORY WRITEスイッチを押す前の写真を先にお見せします。

データスイッチは11110000にセットしていますがMEM/CLOCK回路基板のデータ表示LEDは01100000の状態にやや薄く点灯しています。

MEMORY WRITEスイッチを押しました。

スイッチの通りの表示になりました。

以上、RAMにデータを書き込む操作についての説明をしましたが、RAMに書き込まれているデータをスイッチ操作で読み出すこともできます。
書き込むときと同様、必ずしもアドレス順に操作する必要はありませんが、ここでは上で書きこんだ内容を確認する操作例として説明するためアドレス順に操作します。
RAMのデータを読み出すときはデータスイッチは全部上側(11111111)にしておきます。
またMEMORY WRITEスイッチは押してはいけません。
MEMORY WRITEスイッチを押すと書き込み動作になるのでそのアドレスに11111111が書き込まれてしまいます。

アドレスを00000000にしました。

このときもし誤書き込みを発見したらそこで11111111の代わりに正しいデータをデータスイッチで設定してMEMORY WRITEスイッチを押すことで正しいデータにすることができます。
そのあと今書き込んだ値を確認するにはデータスイッチを再び11111111に戻します。

アドレスを00000001にしました。


アドレスを00000010にしました。


アドレスを00000011にしました。


アドレスを00000100にしました。


RAMの中身が確認できましたので、プログラムを実行してみます。
とりあえずはテスト動作ですのでSP1はSTEPにジャンパピンをセットした状態のままステップ動作を行ないます。
プログラムを実行するときはKEYSW回路基板のRUN/BUSRQスイッチをRUN側にします。

ステップモードの場合それだけではプログラムは実行されません。
最初にリセットする必要があります。
リセットスイッチはMEM/CLOCK回路基板の左下方にあります。
またステップスイッチはその左上方にあります。

ステップスイッチとリセットスイッチです。


リセットスイッチを押すとメモリアドレスが00になってクロックは01になります。


そのあとはステップスイッチを押すとクロック10、離すと11になります。


次にステップスイッチを押すとアドレス00000001のクロック00になり、ステップスイッチを離すとクロック01になります。


以下の写真はステップスイッチを押して離した状態で撮影しましたので、クロックは01と11になっています。


アドレス02、クロック01です。


アドレス02、クロック11です。


アドレス03、クロック01です。


アドレス03、クロック11です。


アドレス04、クロック01です。


アドレス04、クロック11です。

HLTが点灯しました。

上の例ではRAMに命令コードを書き込んだりRAMから読み出したりするときにMEM/CLOCK回路基板のSP1にはSLOWにジャンパピンをセットしました。
その場合にはKEYSW回路基板のRUN/BUSRQスイッチをRUN側にしてもいきなりスタートしないでそのときのプログラムカウンタが示すアドレスで停止していますからそこでリセットスイッチを押すことでアドレス00からステップ動作を開始することができます。
もしもSP1の設定をSLOWやCLK(ノーマルモード)にした状態でRUN/BUSRQスイッチをRUN側にするとそのときのプログラムカウンタが示すアドレスからいきなりCPUが動作を開始してしまうためいわば「暴走状態」になってしまいます。
SP1をSTEPに設定しておくのはそれを避けるためです。
しかしSP1をSLOWやCLKに設定しておいて正常スタートさせることができないということではありません。
SP1をSLOWやCLKに設定した状態でRUN/BUSRQスイッチをRUN側にするときは先にリセットスイッチを押したままの状態にしておいて、そこでスイッチをRUN側にします。
また同様にSP1の設定をSTEPからSLOWやCLKに切り換えるときも先にリセットスイッチを押したままの状態にしておいて、そこでジャンパピンを差し換えます。
もっともMYCPU4の命令コードにはRAMの内容を書き換える命令はありませんから上記の方法によらないでSLOWやCLKでいきなりスタートしてしまったりあるいはプログラムミスでCPUが暴走してしまってもRAMに書かれているプログラムが破壊されてしまうことはありません。
もしプログラムミスがなければあらためてリセットスイッチを押してプログラムの最初からスタートさせれば正常にプログラムを実行することができます。

なお念のため。
ND80Z3.5と接続したときでも同じことがいえますが、MYCPU4のMEM/CLOCK回路基板に搭載しているRAMはバックアップされていないので電源を切るとそれまでRAMに書かれていたプログラムは失われてしまいます。

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

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