示例#1
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));
        }
示例#2
0
        public IOBinSemaforoUI(IOManager ioManager, ushort port)
        {
            InitializeComponent();

            //initialize colors
            Red   = IR.Fill;
            Yello = IA.Fill;
            Green = IV.Fill;
            Black = new SolidColorBrush(Color.FromRgb(0, 0, 0));

            _active = true;

            _ioManager = ioManager;

            LightsOff();

            portNumber.Content = "0x" + UnitConverter.IntToHex(port, defaultWidth: 3);

            // initialize IO Device
            semaforo = new IOBinSemaforo(port);

            //add function to delegate
            semaforo.GotBinContent += UpdateSemaforo;

            // try to add to IO Manager
            // exception wil be thrown if invalid port is selected
            _ioManager.AddIODevice(port, semaforo);

            try
            {
                MouseDown += delegate { DragMove(); };
            }
            catch (Exception) { }
        }
示例#3
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);
        }
示例#4
0
        public void IOManagerTests_AddAnIODevice_Success()
        {
            IOManager io = new IOManager(100);

            io.AddIODevice(80, new Device()
            {
                Id = 1
            });
            io.AddIODevice(82, new Device()
            {
                Id = 2
            });

            Console.WriteLine(io);

            Assert.AreEqual(2, io.ConnectedDevices);

            Assert.IsTrue(io.RemoveIODevice(80));

            Assert.AreEqual(1, io.ConnectedDevices);
        }
示例#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}");
        }
示例#6
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}");
        }
示例#7
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);
        }
示例#8
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);
        }
        public IOHexKeyboardUI(IOManager ioManager, ushort port)
        {
            InitializeComponent();

            _ioManager = ioManager;

            // initialize IO Device
            Keyboard = new IOHexKeyboard(port);

            portNumber.Content = "0x" + UnitConverter.IntToHex(port, defaultWidth: 3);

            // try to add to IO Manager
            // exception wil be thrown if invalid port is selected
            _ioManager.AddIODevice(port, Keyboard);

            try
            {
                MouseDown += delegate { DragMove(); };
            }
            catch (Exception) { }
        }
示例#10
0
        public SevenSegmentWindow(IOManager ioManager, ushort port)
        {
            InitializeComponent();

            _ioManager = ioManager;

            portNumber.Content = "0x" + UnitConverter.IntToHex(port, defaultWidth: 3);

            // initialize IO Device
            SegmentDisplay = new IOSevenSegmentDisplay(port);

            SegmentDisplay.UpdateGui += UpdateDisplay;

            // try to add to IO Manager
            // exception wil be thrown if invalid port is selected
            _ioManager.AddIODevice(port, SegmentDisplay);

            try
            {
                MouseDown += delegate { DragMove(); };
            }
            catch (Exception) { }
        }
示例#11
0
        public Display_GUI(IOManager ioManager, ushort port)
        {
            InitializeComponent();

            _ioManager = ioManager;

            _active = true;

            // initialize IO Device
            display = new ASCII_Display(port);

            portNumber.Content = "0x" + UnitConverter.IntToHex(port, defaultWidth: 3);

            display.GotHexData += UpdateAsciiDisplay;

            // try to add to IO Manager
            // exception wil be thrown if invalid port is selected

            _ioManager.AddIODevice(port, display);

            try
            {
                MouseDown += delegate { DragMove(); };
            }
            catch (Exception) { }

            boxes    = new TextBox[8];
            boxes[0] = box_a;
            boxes[1] = box_b;
            boxes[2] = box_c;
            boxes[3] = box_d;
            boxes[4] = box_e;
            boxes[5] = box_f;
            boxes[6] = box_g;
            boxes[7] = box_h;
        }
示例#12
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);
        }
示例#13
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");
        }