#pragma once #include #include #include namespace n64 { struct SI { SI(); void Reset(); [[nodiscard]] auto Read(u32) const -> u32; void Write(u32, u32); template void DMA(); void DMA(); union Status { u32 raw{}; struct { unsigned dmaBusy : 1; unsigned ioBusy : 1; unsigned reserved : 1; unsigned dmaErr : 1; unsigned : 8; unsigned intr : 1; }; }; bool toDram = false; Status status{}; u32 dramAddr{}; u32 pifAddr{}; PIF pif; }; #define SI_DMA_DELAY (65536 * 2) } // namespace n64