Program【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Programステージ
Programステージのゴールは、これまで拡張してきたCPU回路の原型にメモリーとプログラムカウンターを追加することです。
Programステージを解く
1:Programコンポーネント周辺をワイヤリングする
キャンバスの左上に配置されている大きな板状のものは、Programコンポーネントです。バイトデータがたくさん格納されたコンポーネントであり、メモリーと思ってもらって構いません。
※現時点でのアーキテクチャーでは、メモリー内に格納された1バイトは、1命令として扱われています。
メモリーの中には1バイトデータに区切りがあり、その区切りにはそれぞれに番号が割り当てられいます。この番号を番地といい、一般に英語のままアドレスといいます。
入出力は次の通りです。
入力 | ・Addressピン・・・アドレス。1バイト。 |
出力 | ・Outputピン・・・指定アドレスのバイトデータ。1バイト。 |
ProgramコンポーネントのOuputピンを、既存回路から左側に伸びているワイヤーに接続します。
Programコンポーネントの入力にはアドレス用しかありませんでした。つまり、計算結果をProgramコンポーネントに記憶できません。
加えて、Programコンポーネントに書き込まれた一連のバイトデータは、命令語の集まりであり、プログラムそのものといえます。
以上から、本ステージのProgramコンポーネントはプログラムメモリーに相当します。
RAM(データメモリーに使われる)ではなく、ROM(プログラムメモリーに使われる)で実現できるわけです。
2:プログラムカウンターをワイヤリングする
8 Bit Counterコンポーネントが使える状態になっているので、これをプログラムカウンターとして利用します。つまり、メモリーの番地指示器として使うのです。
8 Bit Counterコンポーネントの入出力は次の通りです。
入力 | ・Increment/Overwriteピン ONなら指定分(デフォルトでは1)ずつ増分(インクリメント)する。増分を変更したければ、「Increment by: 1」の下の8ビット列をON・OFFで変更できる。 OFFなら上書きする。 ・Overwrite valueピン・・・1バイト。カウンターの内容(番地)を上書きする際に、Overwirte valueピンをONにしたうえで使う。 |
出力 | ・Outputピン・・・カンターの内容(番地)を出力する。1バイト。 |
「8 Bit CounterコンポーネントのOutputピン」を「ProgramコンポーネントのAddressピン」に接続します。
3:全体の処理を脳内でトレースする
回路の左上だけを触りましたが、全体を見ておきましょう。次の流れで処理されていきます。
プログラムカウンター(PC)⇒メモリー⇒Instructionビット列の解読処理⇒Instructionに対応するモードで処理⇒コピー結果や計算結果をレジスターに保存 or 出力する
4:テストする
[Run]ボタンを押してテストすると、プログラムカウンターによってメモリー内のデータが1バイトずつ出力されていきます。これが既存回路に流れて、処理されていきます。
今回のステージはかなり簡単でしたが、それはこれまで地道に積み上げてきた結果です。