예제 #1
0
        public void TearDown()
        {
            console.Close();

            System.Console.SetOut(new StreamWriter(System.Console.OpenStandardOutput())
            {
                AutoFlush = true
            });
        }
예제 #2
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                System.Console.WriteLine("Require program to run");
                Environment.Exit(1);
            }

            var file = args[0];

            var programFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file);

            string source = File.ReadAllText(programFile);

            var binary = Assembler.Assemble(source);

            var memory    = new Memory(0x10000);
            var console   = new SystemConsole(memory, CONSOLE_ADDRESS, WIDTH, HEIGHT);
            var processor = new Processor(memory, 0x800);
            var flasher   = new Flasher(memory);

            flasher.Flash(binary);

            var instructions = 0;

            processor.Tick += (o, e) =>
            {
                instructions++;
            };
            processor.Halt += (o, e) => console.Close();

            var start = DateTime.Now;

            processor.Run();
            var end = DateTime.Now;

            var duration = end - start;

            var instructionsPerSecond = instructions / (duration.TotalMilliseconds / 1000.0);

            System.Console.WriteLine($"Ran {instructions} instructions in {duration}");
            System.Console.WriteLine($"{instructionsPerSecond} instructions per second");

            if (Debugger.IsAttached)
            {
                System.Console.ReadLine();
            }
        }