예제 #1
0
        static void Main(string[] args)
        {
            var options = new SwitchOptions();
            if (!CommandLine.ParseArguments(args, options))
                return;

            try
            {
                            if (String.IsNullOrEmpty(options.outFile))
                            {
                                Console.WriteLine("You must supply an outfile.");
                                return;
                            }

                            var source = new System.IO.StreamReader(options.inFile);
                            var lexed = new LexResult();
                            var r = Lexer.Lex(source, lexed);
                            if (r == 0x00)
                            {
                                var destination = System.IO.File.Open(options.outFile, System.IO.FileMode.Create);
                                var writer = new System.IO.BinaryWriter(destination);
                                r = Assembler.Assemble(lexed, writer);
                                writer.Flush();
                                destination.Flush();
                                writer.Close();
                            }
                            Console.WriteLine("Finished with code " + r);
            }
            /*case "emulate":
                        {
                            var source = System.IO.File.Open(options.inFile, System.IO.FileMode.Open);
                            var emulator = new IN8();
                            source.Read(emulator.MEM, 0, 0xFFFF);

                            // Attach devices
                            var teletypeTerminal = new TT3();
                            emulator.AttachHardware(teletypeTerminal, 0x04);

                            while (emulator.STATE_FLAGS == 0x00) emulator.Step();

                            Console.WriteLine(String.Format("Finished in state {0:X2}", emulator.STATE_FLAGS));
                            Console.WriteLine(String.Format("{0:X2} {1:X2} {2:X2} {3:X2} {4:X2} {5:X2} {6:X2} {7:X2}",
                                emulator.A, emulator.B, emulator.C, emulator.D, emulator.E, emulator.H, emulator.L, emulator.O));
                            Console.WriteLine(String.Format("{0:X4} {1:X4} {2:X8}", emulator.IP, emulator.SP, emulator.CLOCK));
                            break;
                        }
                }
            }*/
            catch (Exception e)
            {
                Console.WriteLine("An error occured.");
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }
예제 #2
0
        public static bool ParseArguments(string[] args, SwitchOptions options)
        {
            if (args.Length == 0)
            {
                PrintHelpTopic("main");
                return false;
            }

            for (var i = 0; i < args.Length; ++i)
            {
                if (args[i] == "-help" || args[i] == "-h")
                {
                    if (i + 1 < args.Length)
                        PrintHelpTopic(args[i + 1]);
                    else
                        PrintHelpTopic("main");
                    return false;
                }
                else if (args[i] == "-i" || args[i] == "-in" || args[i] == "-input" || args[i] == "-infile")
                {
                    if (i + 1 < args.Length)
                    {
                        options.inFile = args[i + 1];
                        ++i;
                    }
                    else
                        return false;
                }
                else if (args[i] == "-option" || args[i] == "-op")
                {
                    if (i + 1 < args.Length)
                    {
                        options.options.Add(args[i + 1]);
                        ++i;
                    }
                    else
                    {
                        Console.WriteLine("You must supply an argument to -option");
                        return false;
                    }
                }
                else
                {
                    if (options.inFile == null) options.inFile = args[i];
                    else
                    {
                        Console.WriteLine("I do not understand the switch '" + args[i] + "'");
                        return false;
                    }
                }
            }

            return true;
        }
예제 #3
0
        static void Main(string[] args)
        {
            var options = new SwitchOptions();
            if (!CommandLine.ParseArguments(args, options))
                return;

            try
            {

                var source = System.IO.File.Open(options.inFile, System.IO.FileMode.Open);
                var emulator = new IN8();
                source.Read(emulator.MEM, 0, 0xFFFF);

                // Attach devices
                var teletypeTerminal = new TT3();
                teletypeTerminal.Connect(emulator, 0x04);

                System.Threading.Barrier barrier = new System.Threading.Barrier(2);
                var screenThread = new System.Threading.Thread(() =>
                {
                    var screen = new ICM_CD2.VisualHardwareGrid(emulator);
                    screen.AddHardware(typeof(ICM_CD2.ICM), new Microsoft.Xna.Framework.Point(16, 16), 0x02, 0x03);
                    screen.AddHardware(typeof(ICM_CD2.SevenSegment), new Microsoft.Xna.Framework.Point(528 + 32, 16), 0x05);
                    barrier.SignalAndWait();
                    screen.Run();
                });
                screenThread.SetApartmentState(System.Threading.ApartmentState.STA);
                screenThread.Start();

                barrier.SignalAndWait();

                var cycleTime = DateTime.Now;
                uint cycles = 0;
                while ((emulator.STATE_FLAGS & 0x80) != 0x00)
                {
                    cycles += emulator.Step();
                    if (cycles > 10)
                    {
                        Console.SetCursorPosition(0, 0);

                        //Limit to 1 mhz
                        var endCycleTime = DateTime.Now;
                        Console.WriteLine(
                            String.Format("Running at {0} per {1}", cycles, (endCycleTime - cycleTime).TotalMilliseconds));

                        cycleTime = endCycleTime;
                        cycles -= 10;

                        System.Threading.Thread.Sleep(1);
                    }
                }

                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine(String.Format("Finished in state {0:X2}", emulator.STATE_FLAGS));
                Console.WriteLine(String.Format("A:{0:X2} B:{1:X2} C:{2:X2} D:{3:X2} E:{4:X2} H:{5:X2} L:{6:X2} O:{7:X2}",
                    emulator.A, emulator.B, emulator.C, emulator.D, emulator.E, emulator.H, emulator.L, emulator.O));
                Console.WriteLine(String.Format("IP:{0:X4} SP:{1:X4} CLK:{2:X8}", emulator.IP, emulator.SP, emulator.CLOCK));
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occured.");
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }