Arithmetic EngineとComponent Factory【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Arithmetic Engineステージ
Arithmetic Engineステージのゴールは、ALU(演算装置)を組むことです。
入力 | ・CODE:8ビット。演算の内容をビット列で指示する。 0000 0000bならOR 0000 0001bならNAND 0000 0010bならNOR 0000 0011bならAND 0000 0100bならADD 0000 0101bならSUB それ以外はなし。 ・Input 1:8ビット。演算対象。 ・Input 2:8ビット。演算対象。 |
出力 | ・Ouput:8ビット |
Arithmetic Engineステージを解く
1:回路の設計方針を検討する
Logic Engine回路が引き継がれて表示されますので、これをベースに作ることにします。
Logic Engine回路ではOR、NAND、NOR、ANDといった4つのビット演算をサポートしていました。一方、今回のArithmetic Engine回路では、ADD、SUBといった演算が追加されます。
演算に対応するCODEについては、0~3まで共通です。
よって、8ビットデコーダーの4番目のワイヤーにADD演算回路、5番目のワイヤーにSUB演算回路をつなげればよいとわかります。
2:3桁のCODEに対応する
CODEの最大値が0000 0101bなので、3桁目(4の位)まで使います。
これに対応させるために、Byte Splitterコンポーネントと8 Bit decoderコンポーネント間に1本のワイヤーを追加します。
3:ADD演算を実装する
2つの1バイトデータを加算するには、(1バイトの入力を想定した)Addコンポーネントを使えばよさそうです。
出力は1バイトであり、桁上がり分を処理しようがないので、桁上がりが起きても捨てることにします。
ADD演算の仕組みを内蔵すると、次のようになります。
4:SUB演算を実装する
Input 1のデータからInput 2のデータを引く処理になります。
言い換えれば、Input 1のデータに「Input 2の反転データ」を足す処理になります。
1バイトデータを反転させるには、Negateコンポーネントを使えます。
なお、Negateコンポーネントの内部処理については、以下の記事を参考にしてください。
以上を踏まえて、SUB演算回路を追加すると、次のようになります。
5:テストする
クリアすると、ALUコンポーネントがアンロックされます。
Component Factoryステージ
自由に回路を作れるサンドボックス的なステージです。
作った回路は、以降のステージでCUSTOMからコンポーネントとして呼び出せます。
解くべき回路はなく、開くだけでクリア扱いになり、次に進めます。