public static void PerformFlagDetermination(LM machine)
        {
            MemoryItem var1 = new Variable(machine.GetValueOperand(machine.currentAddress, 1));
            MemoryItem var2 = new Variable(machine.GetValueOperand(machine.currentAddress, 2));

            comparisonOperations[ComparisonFlag.EQUAL]                = LMCommands.Equal(var1, var2);
            comparisonOperations[ComparisonFlag.N_EQUAL]              = LMCommands.NotEqual(var1, var2);
            comparisonOperations[ComparisonFlag.LESS]                 = LMCommands.Less(var1, var2);
            comparisonOperations[ComparisonFlag.GREATER]              = LMCommands.Greater(var1, var2);
            comparisonOperations[ComparisonFlag.LESS_OR_EQUAL]        = LMCommands.LessOrEqual(var1, var2);
            comparisonOperations[ComparisonFlag.GREATER_OR_EQUAL]     = LMCommands.GreaterOrEqual(var1, var2);
            comparisonOperations[ComparisonFlag.INS_LESS]             = LMCommands.UnsignedLess(var1, var2);
            comparisonOperations[ComparisonFlag.INS_GREATER]          = LMCommands.UnsignedGreater(var1, var2);
            comparisonOperations[ComparisonFlag.INS_LESS_OR_EQUAL]    = LMCommands.UnsignedLessOrEqual(var1, var2);
            comparisonOperations[ComparisonFlag.INS_GREATER_OR_EQUAL] = LMCommands.UnsignedGreaterOrEqual(var1, var2);

            machine.GoToNextAddress();
        }
Example #2
0
        protected override void MasterSwitch(RichTextBox textbox)
        {
            switch (GetCurrentCommandNumber())
            {
            case CMD_RM_INPUT:
                LMCommands.InputMessage(textbox, GetName(GetAddressOperand(currentAddress, GetInOutOperand())));
                inputFlag = true;
                break;

            case CMD_RM_OUTPUT:
                LM1Operations.PerformOutputOperation(this, LMCommands.Output, textbox);
                break;

            case CMD_RM_UNSIGNED_INPUT:
                LMCommands.InputMessage(textbox, GetName(GetAddressOperand(currentAddress, GetInOutOperand())));
                uInputFlag = true;
                break;

            case CMD_RM_UNSIGNED_OUTPUT:
                LM1Operations.PerformOutputOperation(this, LMCommands.UnsignedOuput, textbox);
                break;

            case CMD_RM_ADD:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Add);
                break;

            case CMD_RR_ADD:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Add);
                break;

            case CMD_RM_SUBSRACT:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Substract);
                break;

            case CMD_RR_SUBSTRACT:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Substract);
                break;

            case CMD_RM_MULTIPLICATION:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Multiplication);
                break;

            case CMD_RR_MULTIPLICATION:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.Multiplication);
                break;

            case CMD_RM_DIVISION:
                LM1Operations.PerformDivisionOperation(this, LMCommands.Division, LMCommands.Module);
                break;

            case CMD_RR_DIVISION:
                LM1Operations.PerformDivisionOperation(this, LMCommands.Division, LMCommands.Module);
                break;

            case CMD_RM_UNSIGNED_MULTIPLICATION:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.UnsignedMultiplication);
                break;

            case CMD_RR_UNSIGNED_MULTIPLICATION:
                LM1Operations.PerformArithmeticOperation(this, LMCommands.UnsignedMultiplication);
                break;

            case CMD_RR_UNSIGNED_DIVISION:
                LM1Operations.PerformDivisionOperation(this, LMCommands.UnsignedDivision, LMCommands.UnsignedModule);
                break;

            case CMD_RM_UNSIGNED_DIVISION:
                LM1Operations.PerformDivisionOperation(this, LMCommands.UnsignedDivision, LMCommands.UnsignedModule);
                break;

            case CMD_RM_ASSIGMENT_1:
                LM1Operations.PerformRMRRAssignmentOperation(this);
                break;

            case CMD_RM_ASSIGMENT_2:
                LM1Operations.PerformFromRInMAssignmentOperation(this);
                break;

            case CMD_RR_ASSIGMENT:
                LM1Operations.PerformRMRRAssignmentOperation(this);
                break;

            case CMD_RM_COMPARISON:
                LM1Operations.PerformFlagDetermination(this);
                break;

            case CMD_RR_COMPARISON:
                LM1Operations.PerformFlagDetermination(this);
                break;

            case CMD_LESS:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.LESS);
                break;

            case CMD_GREATER:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.GREATER);
                break;

            case CMD_LESS_OR_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.LESS_OR_EQUAL);
                break;

            case CMD_GREATER_OR_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.GREATER_OR_EQUAL);
                break;

            case CMD_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.EQUAL);
                break;

            case CMD_NOT_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.N_EQUAL);
                break;

            case CMD_UNSIGNED_LESS:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.INS_LESS);
                break;

            case CMD_UNSIGNED_GREATER:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.INS_GREATER);
                break;

            case CMD_UNSIGNED_LESS_OR_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.INS_LESS_OR_EQUAL);
                break;

            case CMD_UNSIGNED_GREATER_OR_EQUAL:
                LM1Operations.PerformComparisonOperation(this, LM1Operations.ComparisonFlag.INS_GREATER_OR_EQUAL);
                break;

            case CMD_GO_TO:
                LM1Operations.PerformGoToOperation(this);
                break;

            case CMD_RR_STOP:
                this.endFlag = true;
                break;

            default:
                break;
            }
        }
Example #3
0
        protected override void MasterSwitch(RichTextBox textbox)
        {
            switch (GetCurrentCommandNumber())
            {
            case CMD_INPUT:
                LMCommands.InputMessage(textbox, GetName(GetAddressOperand(currentAddress, 1)));
                inputFlag = true;
                break;

            case CMD_UNSIGNED_INPUT:
                LMCommands.InputMessage(textbox, GetName(GetAddressOperand(currentAddress, 1)));
                uInputFlag = true;
                break;

            case CMD_OUTPUT:
                LM3Operations.PerformOutputOperation(this, LMCommands.Output, textbox);
                break;

            case CMD_UNSIGNED_OUTPUT:
                LM3Operations.PerformOutputOperation(this, LMCommands.UnsignedOuput, textbox);
                break;

            case CMD_ADD:
                LM3Operations.PerformArithmeticOperation(this, LMCommands.Add);
                break;

            case CMD_SUBSRACT:
                LM3Operations.PerformArithmeticOperation(this, LMCommands.Substract);
                break;

            case CMD_MULTIPLICATION:
                LM3Operations.PerformArithmeticOperation(this, LMCommands.Multiplication);
                break;

            case CMD_DIVISION:
                LM3Operations.PerformDivisionOperation(this, LMCommands.Division, LMCommands.Module);
                break;

            case CMD_UNSIGNED_MULTIPLICATION:
                LM3Operations.PerformArithmeticOperation(this, LMCommands.UnsignedMultiplication);
                break;

            case CMD_UNSIGNED_DIVISION:
                LM3Operations.PerformDivisionOperation(this, LMCommands.UnsignedDivision, LMCommands.UnsignedModule);
                break;

            case CMD_ASSIGMENT:
                LM3Operations.PerformAssignmentOperation(this);
                break;

            case CMD_GOTO:
                LM3Operations.PerformGoToOperation(this);
                break;

            case CMD_LESS:
                LM3Operations.PerformComparisonOperation(this, LMCommands.Less);
                break;

            case CMD_GREATER:
                LM3Operations.PerformComparisonOperation(this, LMCommands.Greater);
                break;

            case CMD_LESS_OR_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.LessOrEqual);
                break;

            case CMD_GREATER_OR_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.GreaterOrEqual);
                break;

            case CMD_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.Equal);
                break;

            case CMD_NOT_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.NotEqual);
                break;

            case CMD_UNSIGNED_LESS:
                LM3Operations.PerformComparisonOperation(this, LMCommands.UnsignedLess);
                break;

            case CMD_UNSIGNED_GREATER:
                LM3Operations.PerformComparisonOperation(this, LMCommands.UnsignedGreater);
                break;

            case CMD_UNSIGNED_LESS_OR_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.UnsignedLessOrEqual);
                break;

            case CMD_UNSIGNED_GREATER_OR_EQUAL:
                LM3Operations.PerformComparisonOperation(this, LMCommands.UnsignedGreaterOrEqual);
                break;

            case CMD_STOP:
                endFlag = true;
                return;

            default:
                break;
            }
        }