/// <summary> /// アドレスとデータの書き込み命令を送信キューに追加します。 /// </summary> /// <param name="address">YMF825 のレジスタ番号。範囲は 0x00 から 0x7f です。</param> /// <param name="data">レジスタに書き込まれるデータ。</param> public virtual void Write(byte address, byte data) { if (IsDisposed) { throw new ObjectDisposedException(ToString()); } if (address >= 0x80) { throw new ArgumentOutOfRangeException(nameof(address)); } lock (lockObject) { SpiInterface.Write(address, data); WriteBytes += 2; WriteCommandCount++; DataWrote?.Invoke(this, new DataTransferedEventArgs(CurrentTargetChip, address, data)); if (AutoFlush) { SpiInterface.Flush(); } } }
/// <summary> /// アドレスと可変長データの書き込み命令を送信キューに追加します。 /// </summary> /// <param name="address">YMF825 のレジスタ番号。範囲は 0x00 から 0x7f です。</param> /// <param name="data">可変長データが格納された <see cref="byte"/> 型の配列。</param> /// <param name="offset">配列の読み出しを開始するインデクス。</param> /// <param name="count">配列を読み出すバイト数。</param> public virtual void BurstWrite(byte address, byte[] data, int offset, int count) { if (IsDisposed) { throw new ObjectDisposedException(ToString()); } if (address >= 0x80) { throw new ArgumentOutOfRangeException(nameof(address)); } lock (lockObject) { SpiInterface.BurstWrite(address, data, offset, count); WriteBytes++; BurstWriteBytes += count; BurstWriteCommandCount++; DataBurstWrote?.Invoke(this, new DataBurstWriteEventArgs(CurrentTargetChip, address, data, offset, count)); if (AutoFlush) { SpiInterface.Flush(); } } }
/// <summary> /// 書き込み命令の送信キューをフラッシュし、YMF825 に即時に実行させます。 /// </summary> public void Flush() { if (IsDisposed) { throw new ObjectDisposedException(ToString()); } lock (lockObject) SpiInterface.Flush(); }