自作CPUを作る3.5 ~NandGameでやってみた番外編~
kouemuです。
またしてもf**k_3についてです。
なんとめちゃ簡単に作れました。
なのでOSを実行できるようにもしました。
目次
1.演算装置
今回実装するものがあまりにも少なかったので演算装置をもとから一つにまとめました。
概要は前回までのものをご覧ください。
2.命令装置
こちらも同じくなのですが、接続がぐちゃぐちゃですね。
NANDの実行を「100」に設定していますがこれを「110」に設定すれば少し接続の量を減らせると思います。
またやらかしてましたね。
3.CPU
では早速CPUを見ていきましょう。
と言ってもあまりf**k_4と変わらないんですけどね...
この通りです。
前回と違うのはEEPROMのアドレスセレクトの部分です!
ちゃんと直しましたよ!!(ドヤッ)
4.クロックのおすそ分け
ここではCPUを二つ搭載する際に、入力がごちゃごちゃにならないようにするためのものを作ります。
仕様は、
・クロックをオンにしたときもし前回がどちらもオフなら片方をオンにする。
・クロックをオンにしたとき前回と反対の方をオンにする。
・クロックがオフなら両方オフにする。
となっております。
以下データシート
IN(前回の出力) | OUT1 | OUT2 |
---|---|---|
0(0,0) | 0 | 0 |
0(0,1) | 0 | 0 |
0,(1,0) | 0 | 0 |
0,(1,1) | er | er |
1(0,0) | 1 | 0 |
1(0,1) | 1 | 0 |
1,(1,0) | 0 | 1 |
1,(1,1) | er | er |
5.OSを実行できるCPU
お待たせしました。
こちらがOSを実行できるCPUです。
なぜOSが実行できるのかというと、割り込み処理ができるためです。
(あ、出力にOS実行側のIを送信するのとそれぞれのiを送信するの忘れた)
今回はEEPROMを使用していますがROMだと書き込み上限があるので上の方にあるCPUのEEPROMはただのメモリだと思ってください。
あと、簡略化のために下の方にあるCPUのIに送信するためのアドレス「A」をbitごとに分けていますが本来は最大65,536本の線にできます。
ダブルクロックって書いてあるのはクロック分割です。この時はまだ間違いに気づいてませんでした。
で、割り込み処理のやり方ですが、OS側のCPUでIからメインメモリのデータを取得し、そのデータをもう一つのCPUの命令メモリに書き込みます。
クロックモードを制御するには、Aの0bit目とIの0bit目を1で送信すれば分割モードになります。
Aの0bit目を1で、Iの0bit目を0で送信すればOSモードになります。
アプリケーションの書き込みの時はOSモードにしましょう。
Aの1bit目と2bit目はそれぞれプログラムの書き込み、アドレスの変更となっています。
プログラムや変更先のプログラムメモリのアドレスはそれぞれIから出ています。
今中央のAND2つがありますがこれを3ANDに変えてクロックにも接続でもいいかもしれません。
忘れてる人向けに説明すると出力の「I」はDのデータです。
逆に入力の「I」もDにマウントされているのでDに入ります。
これで、OS側からアプリケーションを実行したり、強制終了させたり、接続の線を増やせばキー入力を行いながら書き込み処理なんかもできますね。
なんせこのCPU処理するためのコードが長くて大変なんですから...
以上になります。
続きは多分実際にCPUを作ると思うので時間がかかると思いますが書きます。