ステージ
上から順に、前のステージで作った部品を使って次を組む。 ステージ名を押すとエディタが開く。進み具合はこのブラウザに保存される。
ルールは遊び方にある。
| # | ステージ | 入力 | 出力 | パー | 自己ベスト |
|---|---|---|---|---|---|
| 1 | NOT 入力を反転する。定数 1 と relay (default on) で作れる。 | a | out | 2 | - |
| 2 | NAND 両方が 1 のときだけ 0。relay (default on) を 2 個並列にして出力をつなぐ。 | a, b | out | 6 | - |
| 3 | AND 両方が 1 のときだけ 1。 | a, b | out | 3 | - |
| 4 | OR どちらかが 1 なら 1。入力ピン同士を直結すると短絡になる。 | a, b | out | 6 | - |
| 5 | XOR 片方だけが 1 のとき 1。リレーの in に入力信号そのものを流すと小さく作れる。 | a, b | out | 12 | - |
| 6 | Selector s が 0 なら a を、1 なら b を出力する。 | s, a, b | out | 12 | - |
| 7 | Switch s が 0 なら in を a に、1 なら b に流す。流れない側は 0。 | s, in | a, b | - | - |
| 8 | Half adder 1 ビット同士を足す。s が和、c が桁上がり。 | a, b | s, c | 30 | - |
| 9 | Full adder 下の桁からの桁上がり ci も含めて足す。 | a, b, ci | s, co | - | - |
| 10 | SR latch s を 1 にすると q が 1 になり、s を 0 に戻しても保つ。r を 1 にすると q が 0 になる。出力を自分の入力へ戻すと状態を保てる。 | s, r | q | 12 | - |
| 11 | D latch st が 1 の間は q が d に従い、st が 0 になるとその時の値を保つ。 | d, st | q | 12 | - |
| 12 | D flip-flop clk が 0 から 1 になった瞬間の d を q に取り込み、次の立ち上がりまで保つ。D ラッチを 2 個つなぎ、片方を clk の反転で動かす。 | d, clk | q | 60 | - |
| 13 | 1-bit register clk の立ち上がりで、st が 1 なら d を取り込み、0 なら今の値を保つ。フリップフロップの前にセレクタを置く。 | d, st, clk | q | - | - |
| 14 | Negative (8-bit) 8 ビットの a を 2 の補数と見て、負なら n を 1 にする。バスを Bus split でばらすと、最上位ビットが取り出せる。 | a[8] | n | 16 | - |
| 15 | Zero (8-bit) 8 ビットの a がすべて 0 なら z を 1 にする。 | a[8] | z | - | - |
| 16 | Selector (8-bit) s が 0 なら a を、1 なら b を出力する。8 本まとめて切り替える。 | s, a[8], b[8] | out[8] | - | - |
| 17 | Adder (8-bit) 8 ビットの a と b と桁上がり入力 ci を足す。s が和の下 8 ビット、co が桁上がり。全加算器を 8 個つなぐ。 | a[8], b[8], ci | s[8], co | - | - |
| 18 | Increment (8-bit) a に 1 を足す。255 の次は 0。 | a[8] | out[8] | - | - |
| 19 | Subtract (8-bit) a から b を引く。結果は 2 の補数の 8 ビット。b を反転して 1 を足したものを加える。 | a[8], b[8] | out[8] | - | - |
| 20 | Register (8-bit) clk の立ち上がりで、st が 1 なら d を取り込み、0 なら保つ。1 ビットレジスタを 8 個並べる。 | d[8], st, clk | q[8] | - | - |
| 21 | Counter (8-bit) clk の立ち上がりごとに 1 増える。st が 1 の立ち上がりでは代わりに in を取り込む。レジスタとインクリメントとセレクタで作る。 | in[8], st, clk | out[8] | - | - |
| 22 | Logic unit (8-bit) op1 op0 で演算を選ぶ。00: x AND y、01: x OR y、10: x XOR y、11: NOT x。ビットごとに同じ回路を 8 個並べ、セレクタで選ぶ。 | x[8], y[8], op1, op0 | out[8] | - | - |
| 23 | Arithmetic unit (8-bit) op1 op0 で演算を選ぶ。00: x + y、01: x + 1、10: x - y、11: x - 1。結果は下 8 ビット。加算器 1 個に、y の反転と定数の切り替えを前置して作れる。 | x[8], y[8], op1, op0 | out[8] | - | - |
| 24 | ALU (8-bit) u が 0 なら算術ユニット、1 なら論理ユニットの結果を出す。zx が 1 なら x を 0 に置き換え、sw が 1 なら x と y を入れ替えてから渡す。 | x[8], y[8], u, op1, op0, zx, sw | out[8] | - | - |
| 25 | Condition (8-bit) x を 2 の補数と見て、負なら lt、ゼロなら eq、正なら gt を見る。該当する条件が 1 なら out を 1 にする。 | x[8], lt, eq, gt | out | - | - |
| 26 | RAM (4 words) a1 a0 で選んだ番地に、clk の立ち上がりで st が 1 なら in を書き、out にはいつも選んだ番地の値を出す。レジスタ 4 個とセレクタで作る。 | in[8], a1, a0, st, clk | out[8] | - | - |
| 27 | Control unit 命令 i を読んで制御線を出す。ldi は即値、wa と wd は A と D への書き込み、w はメモリ書き込み、jmp は分岐、halt は停止。命令の形式は「遊び方」にある。 | i[8] | ldi, wa, wd, w, jmp, halt | - | - |
| 28 | CPU 命令 i とメモリの値 m を受け取り、pc と addr(A レジスタ)、メモリ書き込み w とその値 data を出す。レジスタ A、D、PC と ALU、条件判定、制御ユニットで作る。3 本のプログラムがそのまま動けば合格。 | i[8], m[8], clk | pc[8], addr[8], w, data[8] | - | - |