Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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}");
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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}");
        }
Ejemplo n.º 8
0
        public bool Reset()
        {
            if (!IsOn())
            {
                return(false);
            }

            StopRun = true;

            VirtualMemory = new VirtualMemory(OBJFileLines);

            IoManager?.ResetIOs();

            Micro = new MicroSimulator(VirtualMemory, IoManager);

            return(true);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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++;
            }
        }
Ejemplo n.º 12
0
        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());
        }
Ejemplo n.º 13
0
 public void TestCleanup()
 {
     micro = null;
 }
Ejemplo n.º 14
0
        public void TestSetup()
        {
            VirtualMemory vm = new VirtualMemory(new string[] { });

            micro = new MicroSimulator(vm);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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");
        }