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); } }
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; }
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); } }