Beispiel #1
0
        public override void EseguiCiclo()
        {
            _uc = UnitàControllo.GetInstance();

            DebugInfo();


            if (_uc.Termina)
            {
                // _uc.Termina = false;
                return;
            }

            if (_uc.Stepbystep)
            {
                Thread.CurrentThread.Suspend(); //il thread corrente viene sospeso per garantire lo step-by-step
            }
            if (_uc.ResetFlag)
            {
                ChangeState(_uc, GetInstance("Reset")); //passaggio allo stato di fetch
                return;
            }


            ChangeState(_uc, GetInstance("Halt")); //permanenza nello stato di halt
        }
Beispiel #2
0
        public override void EseguiCiclo()
        {
            _uc = UnitàControllo.GetInstance();
            DebugInfo();
            _fs.RinnovaStato();

            if (_uc.Termina)
            {
                _uc.Termina = false;
                return;
            }

            if (_uc.Stepbystep)
            {
                Thread.CurrentThread.Suspend(); //il thread corrente viene sospeso per garantire lo step-by-step
            }
            var halt = false;


            if (_uc.ResetFlag)
            {
                ChangeState(_uc, GetInstance("Reset")); //passaggio allo stato di reset
                return;
            }

            if (_uc.ResetDone)
            {
                _uc.ResetDone = false;
                ChangeState(_uc, GetInstance("Execute")); //passaggio allo stato di execute
                return;
            }

            CalcMpc();                    //calcolo nuovo MPC

            _uc.Mir = _fs.Fetch(_uc.Mpc); //fetch microistruzione

            if (_uc.Mpc == /*"010100111"*/ "010100111")
            {
                halt = true;
            }
            if ( /*_uc.Mir== "010101000000001101100100000000000001" ||*/
                 /*_uc.Mir == "100000110000000000000000000000001001"*/ halt)
            {
                _uc.Halt = true;
            }

            ChangeState(_uc, GetInstance("Execute")); //passaggio allo stato di execute
        }
        public override void EseguiCiclo()
        {
            DebugInfo();
            _uc           = UnitàControllo.GetInstance();
            _uc.Mir       = "000000001000000000000000000000001001"; //reset MIR
            _uc.NFf       = 0;                                      //reset negative flag
            _uc.ZFf       = 0;                                      //reset zero flag
            _uc.ResetDone = true;
            _uc.ResetFlag = false;
            _uc.Halt      = false;
            _uc.Termina   = false;
            _fs.Reset(); //reset unità operativa


            ChangeState(_uc, GetInstance("Fetch")); //passaggio allo stato di fetch
        }
        public override void EseguiCiclo()
        {
            DebugInfo();
            _uc = UnitàControllo.GetInstance();

            if (_uc.ResetFlag)
            {
                ChangeState(_uc, GetInstance("Reset")); //passaggio allo stato di reset
                return;
            }

            _fs.Execute(_uc.Mir); //esecuzione microistruzione

            if (_uc.Halt)
            {
                ChangeState(_uc, GetInstance("Halt")); //passaggio allo stato di halt
                return;
            }

            ChangeState(_uc, GetInstance("Fetch")); //passaggio allo stato di fetch
        }
Beispiel #5
0
 protected override void ChangeState(UnitàControllo uc, UnitàControlloState newState)
 {
     uc.SetState(newState);
 }