見出し画像

NATUを作る(パート34)

HARUは失敗に終わってしまった。
だが、その悔しさをバネに、新たにNATUを作ることになった。

今回は、条件分岐命令を使ったテストをしていきたいと思います。


テスト

引き算で絶対値を出力

一つ目のテストは、引き算してその差の絶対値を出力させるプログラムにしたいと思います。

ぱっと見、条件分岐は必要なさそうですが、負の数になった時にマイナスをプラスに変える作業が必要になるので、ここに条件分岐を使います。

引き算する値は、インプットポートからインプットするようにして、絶対値はアウトプットポートからアウトプットさせたいと思います。

プログラムは、、、

0:1番地からインプットしてレジスタの1番地に保存
1:2番地からインプットしてレジスタの2番地に保存
2:1番地から2番地を引いて1番地に保存
3:前のフラグがオンだったら5にジャンプ
4:0番地から1番地を引いて1番地に保存
5:0番地と1番地を足して1番地に保存
6:アウトプット

こんな感じにしたいと思います。

プログラムを書き込みました!
それでは、実際に動かしていきたいと思います。

プログラミング済みROM

インプットポートには、10と1を入力しました。

それでは、実行!


不具合

あれ?なぜか1111 1111が出力されてから、答えの0000 0001が出力されています、、、

あ、レジスタデリートでI/Oポートとかの方まで遮断できてない、、、

これは重大な欠陥です。
見つけられてよかった、、、

あと、ついでにPCの初期値設定の機能に問題があったので、修正しておきました。

修正後



よし!

これでアウトプットポートはOK!

修正後

レジスタの所とは別に、アウトプットポート用にぐるぐるしてパルスを6回出す回路を設置しました。

多分、レジスタのところから配線を引っ張ればOKですが、途中全ての通常演算のみの命令を遮断できるように配線を伸ばしてしまったので、こうなっています。

制作の順番の関係って感じですね、、、

いや、でもやっぱりこれはあんまりスマートじゃない気がするので、レジスタの方から配線出来ないか調べてみます。

今は、全く同じ役割の回路が二つあってほぼ無意味な状態ですから、、、


あ、でも無理そうです、、、

レジスタの方は、レジスタ専用に作られているので、アウトプットポートの方まで持っていくと、遅延が間に合いません。

レジスタのレジスタデリート

あと、今はアウトプットポートだけやりましたが、ほんとは、別の命令も遮断できるようにする必要があります。

なので、そこは未来の僕に託しました。
頼む、忘れないでいてくれ、、、

それでは、無事アウトプットポートの修正が出来たので、もう一度プログラムを実行させたいと思います。

お!無事成功しました!!

成功

それでは、今度は逆にして1と10にしたいと思います。

お!無事1引く10の絶対値を出力できました!

成功

それでは、、1111 1111引く0と0引く1111 1111をさせてみたいと思います。

1111 1111引く0
0引く1111 1111

両方とも成功です!

0引く0もうまくいきました。

それじゃぁ、次行ってみよう!

、、、と思いましたが、疲れてしまったので今回はここまでです。

なんか最近体調が悪いんですよね、、、

それでは、次回は16bitの足し算のテストを実行させたいと思います。

今回は、約1時間10分の作業でした。
お疲れさまでした。

それじゃあ、次回、また会いましょう



いいなと思ったら応援しよう!