public void decode(DecodeArgs args) { if (args.locked == false) { registerIR = args.mdr; int negativeOp = 65024; int negativeIFlag = 256; int negativeValue = 255; registerOP = 0; registerI = 0; registerVAL = 0; registerOP = (short)((registerIR & negativeOp) >> 9); registerI = (short)((registerIR & negativeIFlag) >> 8); if(registerOP == 11 || registerOP == 12 || registerOP == 13 || registerOP ==14) { registerI = 1; } if (registerI == 1) { registerVAL = (short)(registerIR & negativeValue); } else { registerVAL = memory[(short)(registerIR & negativeValue)]; } } }
public void stepPipeline(FetchArgs fetchArgs,DecodeArgs decodeArgs,ExecuteArgs executeArgs, WritebackArgs writebackArgs) { Thread f = new Thread(() => fetch(fetchArgs)); Thread d = new Thread(() => decode(decodeArgs)); Thread e = new Thread(() => execute(executeArgs)); Thread w = new Thread(() => writeback(writebackArgs)); f.Start(); d.Start(); e.Start(); w.Start(); f.Join(); d.Join(); e.Join(); w.Join(); }