Input and Output【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Input and Outputレベル
コンピューターを役立てるには、外界とやりとりできる必要があります。モニター、キーボード、タッチセンサー、ネットワークインターファースなどのハードウェアデバイスを通じて行われます。
本レベルでは、ランプとボタンというシンプルなハードウェアデバイスを用います。
ゴールは、設計したコンピューターに入出力できるように機能を追加することです。
- 入出力
- ランプとボタンを接続し、メモリーアドレスのようにアクセスできるようにする。
- デバイスへの出力
- ランプはXのビット値で制御できる。
- 1ビット目(0スタート)が1のとき、ランプはオン信号を得る。
- 0ビット目が1のとき、ランプはオフ信号を得る。
- st(ストア)が1、cl(クロック信号)が1のときに、ハードウェアに信号を得る。
- ランプはXのビット値で制御できる。
- デバイスからの入力
- ボタンの状態は、コンポーネントの出力の15ビット目に示される。
- ボタンが押されると、15ビット目は1になる。逆に押されていなければ、0になる。
- 入寮信号はすぐに読み取れる。
- ボタンの状態は、コンポーネントの出力の15ビット目に示される。
Input and Outputレベルを解く
1:用意されたコンポーネントを確認する
まずはbuttonコンポーネントです。ボタンをクリックすると押すアクションになります。押すと1を出力、離すと元に戻って0を出力します。
次はlampコンポーネントです。通常の電球と違って、入力ピンが2つあります。onピンに1を与えるとランプが点灯します。一度点灯すると、onピンが0になっても点灯状態が維持されます。ただし、offピンに1を与えると強制的に消灯します。これはonピンよりも強い制限です。「offピンが1」⇒「onピンが1」のように後からonピンが1になってもランプは消灯したままです。
当該回路の入力端子であるstとltに接続して、手動で0,1を切り替えてテストしてみてください。次は順にstとclを操作した状況になります。
splitterコンポーネントは、16ビット値を16本のバスに分岐します。
bundlerコンポーネントは、16本のバスを集約して16ビット値にします。
2:ハードウェアに出力する回路を実装する
splitterコンポーネントを配置して、0ビット目と1ビット目にランプを接続します。ただし、stとclが共に1のときにランプを制御するため、Xとsplitterコンポーネントの間にセレクターを置きます。
3:ハードウェアから入力する回路を実装する
スイッチのON・OFFを15ビット目に設定したビット列をOutput端子から出力します。そのためにbundlerコンポーネントを利用します。