public void PushDone() { Values[_indexReg].Set(_stopVal); WriteIndex.Set(_indexReg); _indexReg = null; _isWriting = false; //Don't increment index, so this gets overwritten on next write }
public VWord this[IndexingRegister reg] { get { Temp[0].Set(_lo[reg]); Temp[1].Set(_hi[reg]); //TODO: fix these up: all Ref functions need versions that can accept VByte lists return(VWord.Ref(Temp[0], 2, Temp[0].Name)); } }
public void PushStart(IndexingRegister indexReg) { _indexReg = indexReg; _isWriting = true; if (_indexReg is RegisterX) { X.Set(WriteIndex); } else if (_indexReg is RegisterY) { Y.Set(WriteIndex); } }
public void PushOnce(IndexingRegister indexReg, U8 u8) { if (indexReg is RegisterX) { X.Set(WriteIndex); } else if (indexReg is RegisterY) { Y.Set(WriteIndex); } Values[indexReg].Set(u8); indexReg.Inc(); Values[indexReg].Set(_stopVal); WriteIndex.Set(indexReg); }
public void Read(IndexingRegister indexReg, Action block) { if (_isReading || _isWriting) { throw new Exception("Queue is already reading or writing"); } _isReading = true; _indexReg = indexReg; if (indexReg is RegisterX) { X.Set(ReadIndex); } else if (indexReg is RegisterY) { Y.Set(ReadIndex); } block.Invoke(); ReadIndex.Set(indexReg); _indexReg = null; _isReading = false; }
public Gamepad this[IndexingRegister offset] => _gamepads[offset];
public void Unsafe_Pop(IndexingRegister indexReg) => indexReg.Inc();
public VByte Unsafe_Peek(IndexingRegister indexReg) => Values[indexReg];
public void GoTo(IndexingRegister reg) => GoTo_Indirect(this[reg]);