public void MicroSimulatorTests_ProfTest3_Success() { string[] asmLines = FileManager.Instance.ToReadFile(test3); Lexer lexer = new Lexer(asmLines); Parser parser = new Parser(lexer); Compiler assembler = new Compiler(parser); assembler.Compile(); string[] objData = assembler.GetOutput(); VirtualMemory vm = new VirtualMemory(objData); MicroSimulator micro = new MicroSimulator(vm); int i = 0; while (i < 1000) { micro.NextInstruction(); i++; } Console.WriteLine(micro.MicroRegisters); Console.WriteLine(vm.ToString()); Assert.AreEqual("Registers[0,0,0,0,0,12,15,125]", micro.MicroRegisters.ToString()); }
public void IOManagerTests_WriteToIODevice_Success() { IOManager io = new IOManager(100); Device d1 = new Device() { Id = 1 }; Device d2 = new Device() { Id = 2 }; io.AddIODevice(80, d1); io.AddIODevice(82, d2); MicroSimulator micro = new MicroSimulator( new VirtualMemory(new string[] { }), io ); micro.WriteToMemory(80, "F3"); micro.WriteToMemory(82, "08"); Console.WriteLine(d1); Console.WriteLine(d2); Assert.AreEqual("Device[Id: 1, Data: 243]", d1.ToString()); Assert.AreEqual("Device[Id: 2, Data: 8]", d2.ToString()); Console.WriteLine(micro.ReadFromMemory(80)); Console.WriteLine(micro.ReadFromMemory(82)); }
public void InitializeMicroASM(string[] asmCodeLines, string asmFileName) { Clear(); if (asmFileName == null) { AssemblyLogger = new AssemblyLogger("Assembly"); } else { AssemblyLogger = new AssemblyLogger(asmFileName); } Lexer lexer = new Lexer(asmCodeLines); Parser parser = new Parser(lexer); Compiler compiler = new Compiler(parser, AssemblyLogger); compiler.Compile(); OBJFileLines = compiler.GetOutput(); //Micro simulator setup VirtualMemory = new VirtualMemory(OBJFileLines); // state the last port for the micro IoManager = new IOManager(VirtualMemory.VirtualMemorySize - 1); Micro = new MicroSimulator(VirtualMemory, IoManager); }
public void ASCIIDisplayTests_TestPorts_Write() { VirtualMemory vm = new VirtualMemory(new string[] { "0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Starting State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); ushort start_port = 5; ASCII_Display display = new ASCII_Display(start_port, true); manager.AddIODevice(start_port, display); Console.WriteLine("\nAfter adding ASCII Display:"); Console.WriteLine(manager); Console.WriteLine($"\nIO Device: {display}"); Assert.AreEqual("00", display.ReadFromPort(5)); //Write To Valid port range Assert.IsTrue(display.WriteInPort(5, "48")); Assert.IsTrue(display.WriteInPort(6, "6F")); Assert.IsTrue(display.WriteInPort(7, "6C")); Assert.IsTrue(display.WriteInPort(8, "61")); Console.WriteLine(display); //Writing into invalid Ports //Positive before valid range Assert.AreEqual(display.WriteInPort(4, "X"), false); //Positive after valid range Assert.AreEqual(display.WriteInPort(13, "X"), false); //Maximum Port Number Assert.AreEqual(display.WriteInPort(short.MaxValue, "X"), false); //Negative Port Number Assert.AreEqual(display.WriteInPort(short.MinValue, "X"), false); }
public void ASCIIDisplayTests_ReadFromMicro_Success() { VirtualMemory vm = new VirtualMemory(new string[] { "0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Starting State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); ASCII_Display display = new ASCII_Display(5, true); manager.AddIODevice(5, display); Console.WriteLine("\nAfter adding ASCII Display:"); Console.WriteLine(manager); Console.WriteLine($"\nIO Device: {display}"); Assert.AreEqual("00", display.ReadFromPort(5)); display.WriteInPort(5, "48"); display.WriteInPort(6, "6F"); display.WriteInPort(7, "6C"); display.WriteInPort(8, "61"); Console.WriteLine(display); string h = micro.ReadFromMemory(5); string o = micro.ReadFromMemory(6); string l = micro.ReadFromMemory(7); string a = micro.ReadFromMemory(8); Assert.AreEqual("48", h); Assert.AreEqual("6F", o); Assert.AreEqual("6C", l); Assert.AreEqual("61", a); Console.WriteLine($"\nContent read in Hex: {h} {o} {l} {a}"); }
public void InitializeMicroOBJ(string[] objFileLines) { Clear(); OBJFileLines = objFileLines; //Micro simulator setup VirtualMemory = new VirtualMemory(OBJFileLines); // state the last port for the micro IoManager = new IOManager(VirtualMemory.VirtualMemorySize - 1); Micro = new MicroSimulator(VirtualMemory, IoManager); }
public void IOHexKeyboardTests_ReadFromMicro_Success() { VirtualMemory vm = new VirtualMemory(new string[] { "0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Initial State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); IOHexKeyboard kb = new IOHexKeyboard(5); manager.AddIODevice(5, kb); Console.WriteLine("\nAfter adding IO Hex Keyboard:"); Console.WriteLine(manager); Console.WriteLine($"\nIO Device: {kb}"); Assert.AreEqual("00", kb.ReadFromPort(5)); kb.KeyPress("A"); kb.KeyPress("A"); kb.KeyPress("A"); kb.KeyPress("F"); kb.KeyPress("A"); Console.WriteLine(kb); string contentHex = micro.ReadFromMemory(5); Assert.AreEqual("A1", contentHex); Console.WriteLine($"\nContent read in Hex: {contentHex}"); }
public bool Reset() { if (!IsOn()) { return(false); } StopRun = true; VirtualMemory = new VirtualMemory(OBJFileLines); IoManager?.ResetIOs(); Micro = new MicroSimulator(VirtualMemory, IoManager); return(true); }
public void IOBinSemaforoTests_WriteFromMicro_Success() { VirtualMemory vm = new VirtualMemory(new string[] { "a806", "ff07", "0000", "0102", "0203", "c940", "a812", "1a04", "a816", "1904", "0b08", "a816" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Initial State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); IOBinSemaforo semaforo = new IOBinSemaforo(4, "#Debug"); manager.AddIODevice(4, semaforo); Console.WriteLine("\nAfter adding IO Hex Keyboard:"); Console.WriteLine(manager); for (int i = 0; i < 7; i++) { micro.NextInstruction(); } foreach (char c in semaforo.BitContent) { Assert.AreEqual('1', c); } Console.WriteLine(semaforo); }
public void SevenSegmentTestsTests_WriteFromMicro_Success() { VirtualMemory vm = new VirtualMemory(new string[] { "a806", "ff07", "0000", "0102", "0203", "c940", "a812", "1a04", "a816", "1904", "0b08", "a816" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Initial State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); IOSevenSegmentDisplay segment = new IOSevenSegmentDisplay(9); manager.AddIODevice(9, segment); Console.WriteLine("\nAfter adding IO Hex Keyboard:"); Console.WriteLine(manager); for (int i = 0; i < 7; i++) { micro.NextInstruction(); } foreach (char c in segment.Data) { Assert.AreEqual("11110110", segment.Data); } Console.WriteLine(segment); }
public void MCLoaderTests_LoadObjectFile_Success() { string[] lines = FileManager.Instance.ToReadFile(machineCodeFile); Assert.IsNotNull(lines); string[] expected = { "MCInstructionF3[InstructionAddressDecimal: (decimal)'0', opcode:'21', AddressParamHex:'06']", "MCInstructionF2[InstructionAddressDecimal: (decimal)'6', opcode:'0', Ra:'1', AddressParamHex:'02']", "MCInstructionF2[InstructionAddressDecimal: (decimal)'8', opcode:'0', Ra:'2', AddressParamHex:'03']", "MCInstructionF1[InstructionAddressDecimal: (decimal)'10', opcode:'25', Ra:'1', Rb:'2', Rc:'0']", "MCInstructionF3[InstructionAddressDecimal: (decimal)'12', opcode:'21', AddressParamHex:'12']", "MCInstructionF2[InstructionAddressDecimal: (decimal)'18', opcode:'3', Ra:'1', AddressParamHex:'04']", "MCInstructionF2[InstructionAddressDecimal: (decimal)'20', opcode:'1', Ra:'3', AddressParamHex:'08']", "MCInstructionF3[InstructionAddressDecimal: (decimal)'22', opcode:'21', AddressParamHex:'16']", "MCInstructionF3[InstructionAddressDecimal: (decimal)'22', opcode:'21', AddressParamHex:'16']", "MCInstructionF3[InstructionAddressDecimal: (decimal)'22', opcode:'21', AddressParamHex:'16']" }; VirtualMemory vm = new VirtualMemory(lines); Console.WriteLine(vm); MicroSimulator micro = new MicroSimulator(vm); MCLoader l = new MCLoader(vm, micro); int i = 0; while (i < 10) { IMCInstruction instruction = l.NextInstruction(); Console.WriteLine(instruction); Assert.AreEqual(expected[i], instruction.ToString()); i++; } }
public void MicroSimulatorTests_ProfTest1_Success() { string[] asmLines = FileManager.Instance.ToReadFile(test1); string[] expected = FileManager.Instance.ToReadFile(test1Comparison); Lexer lexer = new Lexer(asmLines); Parser parser = new Parser(lexer); Compiler assembler = new Compiler(parser); assembler.Compile(); string[] objData = assembler.GetOutput(); VirtualMemory vm = new VirtualMemory(objData); MicroSimulator micro = new MicroSimulator(vm); int i = 0; int counter = 0; while (i < 6) { micro.NextInstruction(); Console.WriteLine(micro.CurrentInstruction); Assert.AreEqual(expected[counter++], micro.CurrentInstruction.ToString()); if (micro.CurrentInstruction.Equals(micro.PreviousInstruction)) { i++; } } Console.WriteLine(micro.MicroRegisters); Assert.AreEqual("Registers[0,8,5,49,10,0,0,0]", micro.MicroRegisters.ToString()); Console.WriteLine(vm.ToString()); }
public void TestCleanup() { micro = null; }
public void TestSetup() { VirtualMemory vm = new VirtualMemory(new string[] { }); micro = new MicroSimulator(vm); }
public void ASCIIDisplayTests_TestPorts_Read_Write() { VirtualMemory vm = new VirtualMemory(new string[] { "0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Starting State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); ushort start_port = 5; ASCII_Display display = new ASCII_Display(start_port, true);//Starting port manager.AddIODevice(start_port, display); Console.WriteLine("\nAfter adding ASCII Display:"); Console.WriteLine(manager); Console.WriteLine($"\nIO Device: {display}"); Assert.AreEqual("00", display.ReadFromPort(5)); //Write To Valid port range Assert.IsTrue(display.WriteInPort(5, "48")); Assert.IsTrue(display.WriteInPort(6, "6F")); Assert.IsTrue(display.WriteInPort(7, "6C")); Assert.IsTrue(display.WriteInPort(8, "61")); Console.WriteLine(display); //Verify that it wrote to memory correctly Assert.AreEqual(display.ReadFromPort(5), micro.ReadFromMemory(5)); //Reading from invalid before Port Range var ex = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(4)); Assert.AreEqual(ex.Message, "Invalid port \n"); var ex3 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(13)); Assert.AreEqual(ex3.Message, "Invalid port \n"); //Maximum Port Number var ex1 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(short.MaxValue)); Assert.AreEqual(ex1.Message, "Invalid port \n"); //Minimum Port Number var ex2 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(short.MinValue)); Assert.AreEqual(ex2.Message, "Invalid port \n"); //Writing into invalid Ports //Positive before valid range Assert.AreEqual(display.WriteInPort(4, "X"), false); //Positive after valid range Assert.AreEqual(display.WriteInPort(13, "X"), false); //Maximum Port Number Assert.AreEqual(display.WriteInPort(short.MaxValue, "X"), false); //Negative Port Number Assert.AreEqual(display.WriteInPort(short.MinValue, "X"), false); }
public void ASCIIDisplayTests_TestPorts_Read() { VirtualMemory vm = new VirtualMemory(new string[] { "0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000" }); IOManager manager = new IOManager(100); MicroSimulator micro = new MicroSimulator(vm, manager); Console.WriteLine("Starting State:"); Console.Write(vm); Console.WriteLine(manager); Console.WriteLine(micro); ASCII_Display display = new ASCII_Display(5, true); manager.AddIODevice(5, display); Console.WriteLine("\nAfter adding ASCII Display:"); Console.WriteLine(manager); Console.WriteLine($"\nIO Device: {display}"); display.WriteInPort(5, "48"); display.WriteInPort(6, "6F"); display.WriteInPort(7, "6C"); display.WriteInPort(8, "61"); Console.WriteLine(display); string h = micro.ReadFromMemory(5); string o = micro.ReadFromMemory(6); string l = micro.ReadFromMemory(7); string a = micro.ReadFromMemory(8); Assert.AreEqual("48", h); Assert.AreEqual("6F", o); Assert.AreEqual("6C", l); Assert.AreEqual("61", a); Console.WriteLine($"\nContent read in Hex: {h} {o} {l} {a}"); //Verify that it wrote to memory correctly Assert.AreEqual(display.ReadFromPort(5), micro.ReadFromMemory(5)); //Reading from invalid before Port Range var ex = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(4)); Assert.AreEqual(ex.Message, "Invalid port \n"); var ex3 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(15)); Assert.AreEqual(ex3.Message, "Invalid port \n"); //Maximum Port Number var ex1 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(short.MaxValue)); Assert.AreEqual(ex1.Message, "Invalid port \n"); //Minimum Port Number var ex2 = Assert.ThrowsException <ArgumentException>(() => display.ReadFromPort(short.MinValue)); Assert.AreEqual(ex2.Message, "Invalid port \n"); }