namespace CPUSimulation { public class CU // Control Unit { int numberOfRegisters = 16; Dictionary _instructionSet; Dictionary _registers; public CU(int numberOfMemoryBanks) { _instructionSet = new Dictionary(); _instructionSet.Add("00000", "NOP"); _instructionSet.Add("00001", "LOAD"); _instructionSet.Add("00010", "STORE"); _instructionSet.Add("00011", "ADD"); _instructionSet.Add("00100", "SUB"); _instructionSet.Add("00101", "JUMP"); _instructionSet.Add("00110", "JUMPIFZERO"); _instructionSet.Add("00111", "JUMPIFNEG"); _instructionSet.Add("01000", "AND"); _instructionSet.Add("01001", "OR"); _instructionSet.Add("01010", "XOR"); _instructionSet.Add("01011", "NOT"); _instructionSet.Add("01100", "SHL"); _instructionSet.Add("01101", "SHR"); _instructionSet.Add("01110", "INC"); _instructionSet.Add("01111", "DEC"); _registers = new Dictionary(); Word zeroWord = new Word(new Byte[2] { new Byte("00000000"), new Byte("00000000") }); for (int i = 0; i < numberOfRegisters; i++) { string registerName = ((byte)i).ToString().Substring(4, 4); _registers.Add(registerName, zeroWord); } } internal class ProgramCounter { Int16 _value; public ProgramCounter() { _value = 0; } public void Increment() { _value++; } public void SetValue(string value) { _value = Convert.ToInt16(value, 2); } public string GetValue() { return Utils.Int16ToBinaryString(_value); } } } }