public static void doMath(CommandType command, List <int> operands, eightChipsSimulator simulator, Func <int, int, int> oper) { var operandAsInt = operands[0]; var finalAddress = operandAsInt; var dataToAdd = simulator.mainMemory[finalAddress]; simulator.BRegister = dataToAdd; var a = simulator.ARegister; var b = simulator.BRegister; var result = oper(a, b); simulator.ARegister = result; simulator.logger.log($"{command}: performing operation on {a} from at A reg to {b} from B reg which was originally at memory address {finalAddress}"); incrementCounter(simulator, 2); }
public void pointerSimple() { var path = Path.GetTempFileName(); System.IO.File.WriteAllText(path, pointerTest1); var translator = new vmtranslator.vmtranslator(path); var assembly = translator.TranslateToAssembly().ToList(); assembly.Add(assembler.CommandType.HALT.ToString()); System.IO.File.WriteAllLines(path, assembly); var assemblerInstance = new assembler.Assembler(path); var assembledResult = assemblerInstance.ConvertToBinary(); var binaryProgram = assembledResult.Select(x => Convert.ToInt32(x, 16)); var simulatorInstance = new simulator.eightChipsSimulator(16, (int)Math.Pow(2, 16)); simulatorInstance.setUserCode(binaryProgram.ToArray()); simulatorInstance.ProgramCounter = (int)MemoryMap[MemoryMapKeys.user_code].AbsoluteStart; var pt1Monitor = new MonitorHandle <int>(3032, simulatorInstance.mainMemory); var pt2Monitor = new MonitorHandle <int>(3046, simulatorInstance.mainMemory); var thismon = new MonitorHandle <int>(259, simulatorInstance.mainMemory); var thatmon = new MonitorHandle <int>(260, simulatorInstance.mainMemory); simulatorInstance.runSimulation(); //simulatorInstance.printMemory(0); var sp = simulatorInstance.mainMemory[simulatorInstance.mainMemory[256] - 1]; //simulatorInstance.printMemory(0); Assert.AreEqual(6084, sp); var pt1values = pt1Monitor.getValues(); var pt2values = pt2Monitor.getValues(); var thisvalues = thismon.getValues(); var thatvalues = thatmon.getValues(); new List <List <int> >() { pt1values, pt2values, thisvalues, thatvalues }.ForEach(x => { x.ForEach(y => Console.WriteLine(y)); Console.WriteLine("---------------"); }); //pointers are set correctly //TODO I am not sure 100% sure these 27x values are correct. Assert.IsTrue(new int[] { 0, 272, 3030, 272, 272 }.SequenceEqual(thisvalues)); Assert.IsTrue(new int[] { 0, 273, 3040, 273, 273 }.SequenceEqual(thatvalues)); //Assert.AreEqual(3030, simulatorInstance.mainMemory[259]); //Assert.AreEqual(3040, simulatorInstance.mainMemory[260]); //values at pointers are correct. //TODO not sure how to check this or what the correct value should be because we set the //pointers back when returning - we may want to use monitors for these mem locations instead. Assert.IsTrue(new int[] { 0, 32 }.SequenceEqual(pt1values)); Assert.IsTrue(new int[] { 0, 46 }.SequenceEqual(pt2values)); }
public static void incrementCounter(eightChipsSimulator simulator, int num) { int incrementCounter = (int)(simulator.ProgramCounter + num); simulator.ProgramCounter = incrementCounter; }