예제 #1
0
파일: CPU.cs 프로젝트: Jsimmons--dev/Gemini
        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)];
                }
            }
        }
예제 #2
0
파일: CPU.cs 프로젝트: Jsimmons--dev/Gemini
 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();
 }