/var/log/messages

debugging with sixth sense

CPU を作る課題

pc が次の命令を、ではなくて A レジスタにあるアドレスを、というケイスについては

  • C 命令の j 領域
  • ALU の戻り (zr および ng)

を元に判断すれば良い、というのは分かっているのですが、どうやって判定してその結果を load なフラグに保存すれば良いのか、が微妙。どのゲイトを使えば良いのかも分からない次第ス。

実は

以下なカンジのナニがあれば良いのか?

Mux(a=a, b=b, sel=sel[0], out=tmpab);
Mux(a=c, b=d, sel=sel[0], out=tmpcd);
Mux(a=e, b=f, sel=sel[0], out=tmpef);
Mux(a=g, b=h, sel=sel[0], out=tmpgh);

Mux(a=tmpab, b=tmpcd, sel=sel[1], out=tmpabcd);
Mux(a=tmpef, b=tmpgh, sel=sel[1], out=tmpefgh);

Mux(a=tmpabcd, b=tmpefgh, sel=sel[2], out=out);

sel[0] は j1, sel[1] は j2, sel[2] は j3 で

  • a は false
  • b は (and (not zr) (not ng))
  • c は (and zr (not ng))
  • d は (not ng)
  • e は (and (not zr) ng)
  • f は (not zr)
  • g は (or (and zr (not ng)) (and (not zr) ng))
  • h は true

を渡せば良いのかどうか。

メモリ

以下を机上ででっちあげてますが試験してません xD

RAM16K(in=in, load=load2, address=address[0..13], out=out2)
Screen(in=in, load=load1, address=address[0..13], out=out1);
Keyboard(out=out3);

DMux(in=load, sel=address[15], a=load2, b=load1);
Mux4Way16(a=out2, b=out2, c=out1, d=out3, sel=address[13..14], out=out);

実装して試験する時間が確保できるのはいつになるやら、な今日この頃だったりします xD

Comments