public void DataMovOperationsTests_StoreValueInRegisterToMemory_Success() { // Set register state to Registers[0,0,4,16,0,0,0,0] micro.MicroRegisters.SetRegisterValue(2, "04"); micro.MicroRegisters.SetRegisterValue(3, "10"); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual("Registers[0,0,4,16,0,0,0,0]", micro.MicroRegisters.ToString()); string memoryAddress1 = UnitConverter.IntToBinary(50); string memoryAddress2 = UnitConverter.IntToBinary(51); Console.WriteLine($"Memory1: {UnitConverter.BinaryToInt(memoryAddress1)}"); Console.WriteLine($"Memory1: {UnitConverter.BinaryToInt(memoryAddress2)}"); // {F2} STORE mem, Ra [mem] <- R[Ra] MCInstructionF2 i1 = new MCInstructionF2(3, "00011", "010", memoryAddress1); MCInstructionF2 i2 = new MCInstructionF2(3, "00011", "011", memoryAddress2); // execute store InstructionSetExe.ExecuteInstruction(i1, micro); InstructionSetExe.ExecuteInstruction(i2, micro); Console.WriteLine($"VirtualMemory #{UnitConverter.BinaryToInt(memoryAddress1)}: " + $"{UnitConverter.HexToInt(micro.ReadFromMemory(UnitConverter.BinaryToInt(memoryAddress1)))}"); Console.WriteLine($"VirtualMemory #{UnitConverter.BinaryToInt(memoryAddress2)}: " + $"{UnitConverter.HexToInt(micro.ReadFromMemory(UnitConverter.BinaryToInt(memoryAddress2)))}"); Assert.AreEqual(4, UnitConverter.HexToInt(micro.ReadFromMemory( UnitConverter.BinaryToInt(memoryAddress1) ))); Assert.AreEqual(16, UnitConverter.HexToInt(micro.ReadFromMemory( UnitConverter.BinaryToInt(memoryAddress2) ))); }
public void FlowControlOperationsTests_GRT_Success2() { // GRT Ra, Rb {F1} Cond <- R[Ra] > R[Rb] string ra = "001"; // 1 string rb = "010"; // 2 string valInA = "00000101"; // 5 string valInB = "00000111"; // 7 bool result = false; // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(ra), UnitConverter.BinaryToHex(valInA)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb), UnitConverter.BinaryToHex(valInB)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual($"Registers[0,5,7,0,0,0,0,0]", micro.MicroRegisters.ToString()); // start instruction MCInstructionF1 instructionF1 = new MCInstructionF1(4, "11001", ra, rb); Console.WriteLine(instructionF1); InstructionSetExe.ExecuteInstruction(instructionF1, micro); Console.WriteLine(micro); Assert.AreEqual(result, micro.ConditionalBit); }
public MCInstructionF1(ushort decimalAddress, string opCodeBinary, string Ra, string Rb = null, string Rc = null) { OpCode = (byte)UnitConverter.BinaryToInt(opCodeBinary); this.Ra = Ra == null || Ra.Length == 0 ? (byte)0 : UnitConverter.BinaryToByte(Ra); this.Rb = Rb == null ? (byte)0 : UnitConverter.BinaryToByte(Rb); this.Rc = Rc == null ? (byte)0 : UnitConverter.BinaryToByte(Rc); InstructionAddressDecimal = decimalAddress; }
public void DataMovOperationsTests_STOREFrom0_Success() { string addrs = "00000010"; // STORE R0 02 MCInstructionF2 i1 = new MCInstructionF2(3, "00011", "000", addrs); InstructionSetExe.ExecuteInstruction(i1, micro); Assert.AreEqual("00", micro.ReadFromMemory( UnitConverter.BinaryToInt(addrs) )); }
public void LogicOperationsTests_OR_Success() { // AND Ra, Rb, Rc {F1} R[Ra]<- R[Rb]*R[Rc] string ra = "001"; // 1 string rb = "011"; // 3 string rc = "111"; // 7 string valInB = "00100100"; string valInC = "11101111"; string resultA = "11101111"; // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb), UnitConverter.BinaryToHex(valInB)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rc), UnitConverter.BinaryToHex(valInC)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.BinaryToHex(valInB), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb)) ); Assert.AreEqual( UnitConverter.BinaryToHex(valInC), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rc)) ); MCInstructionF1 i1 = new MCInstructionF1(3, "01100", ra, rb, rc); Console.WriteLine(i1); // execute instruction InstructionSetExe.ExecuteInstruction(i1, micro); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.BinaryToHex(resultA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); }
public void InstructionSetExeTester_SUB_Success() { // ADD Ra, Rb, Rc {F1} R[Ra]<- R[Rb]+R[Rc] string ra = "110"; // 6 string rb = "011"; // 3 string rc = "101"; // 5 sbyte valInB = 20; sbyte valInC = 83; sbyte resultA = (sbyte)(valInB - valInC); // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb), UnitConverter.IntToHex(valInB)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rc), UnitConverter.IntToHex(valInC)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.IntToHex(valInB), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb)) ); Assert.AreEqual( UnitConverter.IntToHex(valInC), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rc)) ); MCInstructionF1 i1 = new MCInstructionF1(3, "01000", ra, rb, rc); InstructionSetExe.ExecuteInstruction(i1, micro); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.ByteToHex(resultA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); }
public void InstructionSetExeTester_SUBIM_Success() { // SUBIM Ra, cons {F2} R[Ra] <- R[Ra]-cons string ra = "001"; // 1 sbyte valInA = 20; sbyte constVal = -33; sbyte resultA = (sbyte)(valInA - constVal); // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(ra), UnitConverter.ByteToHex(valInA)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.IntToHex(valInA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); MCInstructionF2 i2 = new MCInstructionF2(3, "01010", ra, UnitConverter.ByteToBinary(constVal) ); Console.WriteLine(i2); // execute instruction InstructionSetExe.ExecuteInstruction(i2, micro); Console.WriteLine(micro.MicroRegisters); Console.WriteLine($"Result in 0x{UnitConverter.ByteToHex((byte)resultA)}"); Console.WriteLine($"Result in binary: {UnitConverter.ByteToHex((byte)resultA)}"); Assert.AreEqual( UnitConverter.ByteToHex((byte)resultA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); }
public void LogicOperationsTests_NOT_Success() { // NOT Ra,Rb {F1} R[Ra] <- Complement(R[Rb]) string ra = "001"; // 1 string rb = "011"; // 3 string valInB = "00100100"; string resultA = "11011011"; // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb), UnitConverter.BinaryToHex(valInB)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.BinaryToHex(valInB), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb)) ); MCInstructionF1 i1 = new MCInstructionF1(3, "01110", ra, rb); Console.WriteLine(i1); // execute instruction InstructionSetExe.ExecuteInstruction(i1, micro); Console.WriteLine(micro.MicroRegisters); Console.WriteLine($"Expected: {UnitConverter.BinaryToHex(resultA)}," + $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))}"); Assert.AreEqual( UnitConverter.BinaryToHex(resultA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); }
public void InstructionSetExeTester_ADDIM_Success() { // ADDIM Ra, cons {F2} R[Ra] <- R[Ra]+cons string ra = "110"; // 6 sbyte valInA = 20; sbyte constVal = -33; sbyte resultA = (sbyte)(valInA + constVal); // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(ra), UnitConverter.ByteToHex(valInA)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.ByteToHex(valInA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); MCInstructionF2 i2 = new MCInstructionF2(3, "01001", ra, UnitConverter.ByteToBinary(constVal) ); Console.WriteLine(i2); InstructionSetExe.ExecuteInstruction(i2, micro); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.ByteToHex(resultA), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra)) ); }
public void LogicOperationsTests_ROTAL_Success() { // ROTAL Ra, Rb, Rc {F1} R[Ra]<- R[Rb] rtl R[Rc] string ra1 = "001"; // 1 string rb1 = "010"; // 2 string rc1 = "011"; // 3 string ra2 = "101"; // 5 string rb2 = "110"; // 6 string rc2 = "111"; // 7 MCInstructionF1 i1 = new MCInstructionF1(3, "10011", ra1, rb1, rc1); MCInstructionF1 i2 = new MCInstructionF1(3, "10011", ra2, rb2, rc2); string valInB1 = "10111100"; string valInC1 = UnitConverter.ByteToBinary(2); string resultA1 = "11110010"; string valInB2 = "10011100"; string valInC2 = UnitConverter.ByteToBinary(2); string resultA2 = "01110010"; // set data in register //////////// /// Test 1 micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb1), UnitConverter.BinaryToHex(valInB1)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rc1), UnitConverter.BinaryToHex(valInC1)); //////////// //////////// /// Test 2 micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb2), UnitConverter.BinaryToHex(valInB2)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rc2), UnitConverter.BinaryToHex(valInC2)); /////////// Console.WriteLine(micro.MicroRegisters); // Assert Registers Assert.AreEqual("Registers[0,0,-68,2,0,0,-100,2]", micro.MicroRegisters.ToString()); Console.WriteLine(i1); Console.WriteLine(i2); // execute instruction InstructionSetExe.ExecuteInstruction(i1, micro); InstructionSetExe.ExecuteInstruction(i2, micro); Console.WriteLine(micro.MicroRegisters); Console.WriteLine($"Expected1: {UnitConverter.BinaryToHex(resultA1)}," + $"Actual: {micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1))}"); Console.WriteLine($"Expected1: {UnitConverter.HexToBinary(micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1)))}"); Console.WriteLine($"Expected2: {UnitConverter.BinaryToHex(resultA2)}," + $"Actual: {micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2))}"); Console.WriteLine($"Expected2: {UnitConverter.HexToBinary(micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2)))}"); Assert.AreEqual( UnitConverter.BinaryToHex(resultA1), micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1)) ); Assert.AreEqual( UnitConverter.BinaryToHex(resultA2), micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2)) ); }
public void LogicOperationsTests_NEG_Success() { // NEG Ra,Rb {F1} R[Ra]<- - R[Rb] string ra1 = "001"; // 1 string rb1 = "011"; // 3 string ra2 = "110"; // 6 string rb2 = "111"; // 7 string valInB1 = UnitConverter.ByteToBinary(-13); string resultA1 = UnitConverter.ByteToBinary(13); string valInB2 = UnitConverter.ByteToBinary(-45); string resultA2 = UnitConverter.ByteToBinary(45); // set data in register micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb1), UnitConverter.BinaryToHex(valInB1)); micro.MicroRegisters.SetRegisterValue( (byte)UnitConverter.BinaryToInt(rb2), UnitConverter.BinaryToHex(valInB2)); Console.WriteLine(micro.MicroRegisters); Assert.AreEqual( UnitConverter.BinaryToHex(valInB1), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb1)) ); Assert.AreEqual( UnitConverter.BinaryToHex(valInB2), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb2)) ); MCInstructionF1 i1 = new MCInstructionF1(3, "01111", ra1, rb1); MCInstructionF1 i2 = new MCInstructionF1(3, "01111", ra2, rb2); Console.WriteLine(i1); Console.WriteLine(i2); // execute instruction InstructionSetExe.ExecuteInstruction(i1, micro); InstructionSetExe.ExecuteInstruction(i2, micro); Console.WriteLine(micro.MicroRegisters); Console.WriteLine($"Expected1: {UnitConverter.BinaryToHex(resultA1)}," + $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra1))}"); Console.WriteLine($"Expected2: {UnitConverter.BinaryToHex(resultA2)}," + $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra2))}"); Assert.AreEqual( UnitConverter.BinaryToHex(resultA1), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra1)) ); Assert.AreEqual( UnitConverter.BinaryToHex(resultA2), micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra2)) ); }