Esempio n. 1
0
        /// <summary>
        /// Reset program
        /// </summary>
        /// <param name="code">Machine code</param>
        public void Reset(Word[] code)
        {
            for (int i = 0; i < code.Length; i++)
            {
                Code[i] = To40BitsValue(code[i]);
            }

            Machine = new IAS_Machine(Code);
            Machine.ManualJumpTo(StartPosiotion);
        }
Esempio n. 2
0
        /// <summary>
        /// Run OS
        /// </summary>
        public void Run()
        {
            bool error = false;

            try
            {
                bool use;

                do
                {
                    Console.Clear();
                    Console.WriteLine("SYMULATOR IAS");
                    Console.WriteLine();
                    Console.WriteLine("Wycierz program do uruchomienia");
                    Console.WriteLine("Następnie naciśnij spację aby uruchomić kolejne polecenie");
                    Console.WriteLine("X aby wyjść");
                    Console.WriteLine("----------------------------------------------------------");

                    for (int i = 1; i <= programs.Length; i++)
                    {
                        Console.WriteLine($"{i}) {programs[i - 1].Name}");
                    }

                    Console.WriteLine("----------------------------------------------------------");

                    Console.Write("Twój wybór: ");

                    int option = -1;

                    try
                    {
                        option = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception) { }

                    Console.Clear();

                    use = option > 0 && option <= programs.Length;

                    if (use)
                    {
                        ProgramOn_IAS program = programs[option - 1];

                        Console.WriteLine($"{option}) {program.Name}");

                        long[] n = new long[program.Wariables];

                        for (int i = 0; i < program.Wariables; i++)
                        {
                            Console.Write($"m[{i}] = ");
                            n[i] = Convert.ToInt64(Console.ReadLine());
                        }

                        program.Reset(n);

                        IAS_Machine machine = program.Machine;

                        Console.WriteLine();
                        Console.WriteLine(machine.ToString(program.MemoryToShow));

                        char key = Console.ReadKey().KeyChar;

                        int  counter    = 0;
                        bool endMessage = false;

                        while ((key != 'x' && key != 'X'))
                        {
                            if (!machine.HaltState)
                            {
                                counter++;
                                machine.Cycle();

                                Console.WriteLine($"Krok: {counter}");
                                Console.WriteLine(machine.ToString(program.MemoryToShow));
                            }
                            else if (!endMessage)
                            {
                                endMessage = true;
                                Console.WriteLine("IAS skończył swoją pracę");
                            }

                            key = Console.ReadKey().KeyChar;
                        }
                    }
                } while (use);
            }
            catch (Exception e)
            {
                error = true;

                Console.Clear();

                Console.WriteLine("Maszyna IAS się zmęczyła wróć później, najprawdopodobniej zawiódł operator maszyny :(");
                Console.WriteLine(e.Message);
            }

            if (!error)
            {
                Console.Clear();

                Console.WriteLine("Maszyna IAS dziękuje za pamięć :)");
            }
        }