ステージ

上から順に、前のステージで作った部品を使って次を組む。 ステージ名を押すとエディタが開く。進み具合はこのブラウザに保存される。

ルールは遊び方にある。

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