public Chip(Action <PropertyObservationWrapper <short>, PropertyChangedEventArgs> registerActionShort, Action <PropertyObservationWrapper <byte>, PropertyChangedEventArgs> registerActionByte, Action <PropertyObservationWrapper <bool>, PropertyChangedEventArgs> flagChangedAction, List <BaseInstruction> instructions) { for (int i = 0; i < instructions.Count; i++) { OffsetToIndexMap.Add((short)(instructions[i].ByteOffset + Helper.InitialOffset), i); IndexToOffsetMap.Add(i, (short)(instructions[i].ByteOffset + Helper.InitialOffset)); } foreach (var kvp in Flags) { kvp.Value.PropertyChanged += flagChangedAction; } this.instructions = instructions; XRegister = new PropertyObservationWrapper <byte>(0, "X-Register"); XRegister.PropertyChanged += registerActionByte; YRegister = new PropertyObservationWrapper <byte>(0, "Y-Register"); YRegister.PropertyChanged += registerActionByte; AccumulatorRegister = new PropertyObservationWrapper <byte>(0, "Accumulator Register"); AccumulatorRegister.PropertyChanged += registerActionByte; StackPointer = new PropertyObservationWrapper <byte>(0, "Stack Pointer"); StackPointer.PropertyChanged += registerActionByte; ProgramCounter = new PropertyObservationWrapper <short>(Helper.InitialOffset, "Program Counter"); ProgramCounter.PropertyChanged += registerActionShort; }
public Ram(Action <PropertyObservationWrapper <byte>, PropertyChangedEventArgs> actionToRunOnChange) { for (int i = 0; i < Memory.Length; i++) { Memory[i] = new PropertyObservationWrapper <byte>(0, new MemoryData(i)); Memory[i].PropertyChanged += actionToRunOnChange; } }