/** * The second module of Hack's CU (Control Unit) fetches instructions */ CHIP cuFet { IN instruction[4], // Jump information ([0..2,15]) zeroResult, negativeResult; OUT loadPC; PARTS: // loadPC And(a=instruction[2]/*j1*/, b=negativeResult, out=jumpX); And(a=instruction[1]/*j2*/, b=zeroResult, out=jumpY); Or(a=negativeResult, b=zeroResult, out=noPositiveResult); Not(in=noPositiveResult, out=positiveResult); And(a=instruction[0]/*j3*/, b=positiveResult, out=jumpZ); Or(a=jumpX, b=jumpY, out=jumpXY); Or(a=jumpXY, b=jumpZ, out=jumpXYZ); And(a=jumpXYZ, b=instruction[3]/*=i*/, out=loadPC); }