Example #1
0
        protected override void PrivilegedExecute()
        {
            if (IsReadInstruction)
            {
                switch (ReadOpCode)
                {
                case MemoryManagementReadOpCode.CINT:
                    CINT();
                    break;

                case MemoryManagementReadOpCode.RDF:
                    RDF();
                    break;

                case MemoryManagementReadOpCode.RIB:
                    RIB();
                    break;

                case MemoryManagementReadOpCode.RIF:
                    RIF();
                    break;

                case MemoryManagementReadOpCode.RMF:
                    RMF();
                    break;

                case MemoryManagementReadOpCode.SINT:
                    SINT();
                    break;

                case MemoryManagementReadOpCode.CUF:
                    CUF();
                    break;

                case MemoryManagementReadOpCode.SUF:
                    SUF();
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            else
            {
                if (ChangeOpCodes.HasFlag(MemoryManagementChangeOpCodes.CDF))
                {
                    Register.DF.SetDF(Data >> 3);
                }

                if (ChangeOpCodes.HasFlag(MemoryManagementChangeOpCodes.CIF))
                {
                    Register.IB.SetIB(Data >> 3);

                    Interrupts.Inhibit();
                }
            }
        }
Example #2
0
        private void RMF()
        {
            var sf = Register.SF;

            Register.IB.SetIB(sf.IF);
            Register.DF.SetDF(sf.DF);
            Register.UB.SetUB(sf.UF);

            Interrupts.Inhibit();
        }
Example #3
0
        private void RTF()
        {
            var acc = Register.AC.Accumulator;

            Register.AC.SetLink((acc >> 11) & Masks.FLAG);

            Register.IB.SetIB(acc >> 3);
            Register.DF.SetDF(acc);
            Register.UB.SetUB(acc >> 6);

            Interrupts.Enable(false);
            Interrupts.Inhibit();
        }
Example #4
0
        private void SUF()
        {
            Register.UB.SetUB(1);

            Interrupts.Inhibit();
        }
Example #5
0
        private void CUF()
        {
            Register.UB.Clear();

            Interrupts.Inhibit();
        }