1#ifndef YAZE_APP_EMU_APU_H_
2#define YAZE_APP_EMU_APU_H_
65 uint8_t
SpcRead(uint16_t address);
66 void SpcWrite(uint16_t address, uint8_t data);
71 uint8_t
Read(uint16_t address);
72 void Write(uint16_t address, uint8_t data);
86 void GetSamples(int16_t* buffer,
int count,
bool loop =
false) {
89 void WriteDma(uint16_t address,
const uint8_t* data,
int count) {
90 for (
int i = 0; i < count; i++) {
91 ram[address + i] = data[i];
121 if (timer_index < 0) timer_index = 0;
122 if (timer_index > 2) timer_index = 2;
123 return timer_[timer_index];
131 if (address < 0x80) {
139 std::vector<uint8_t>
ram = std::vector<uint8_t>(0x10000, 0);
159 [&](uint16_t adr, uint8_t val) {
SpcWrite(adr, val); },
160 [&](uint16_t adr) {
return SpcRead(adr); },
161 [&](
bool waiting) {
SpcIdle(waiting); },
The Apu class represents the Audio Processing Unit (APU) of a system.
std::array< Timer, 3 > timer_
uint8_t SpcRead(uint16_t address)
uint8_t Read(uint16_t address)
void WriteToDsp(uint8_t address, uint8_t value)
Write directly to DSP register Used for direct instrument/note preview without going through driver.
void LoadState(std::istream &stream)
debug::ApuHandshakeTracker * handshake_tracker_
void Write(uint16_t address, uint8_t data)
void SpcIdle(bool waiting)
auto spc700() -> Spc700 &
uint64_t last_master_cycles_
const Timer & GetTimer(int timer_index) const
Get timer state for debug UI.
bool IsDriverRunning() const
Check if SPC has completed IPL ROM boot and is running driver code.
void set_handshake_tracker(debug::ApuHandshakeTracker *tracker)
auto dsp() const -> const Dsp &
void RunCycles(uint64_t cycles)
void SpcWrite(uint16_t address, uint8_t data)
void WriteDma(uint16_t address, const uint8_t *data, int count)
std::vector< uint8_t > ram
uint8_t GetControl() const
std::array< uint8_t, 4 > out_ports_
void BootstrapDirect(uint16_t entry_point)
Bootstrap SPC directly to driver code (bypasses IPL ROM handshake)
void GetSamples(int16_t *buffer, int count, bool loop=false)
uint64_t GetCycles() const
uint8_t GetStatus() const
std::array< uint8_t, 6 > in_ports_
void SaveState(std::ostream &stream)
void GetSamples(int16_t *sample_data, int samples_per_frame, bool pal_timing)
void Write(uint8_t adr, uint8_t val)
Implementation of the Memory interface for emulating memory in a SNES system.
The Spc700 class represents the SPC700 processor.
IPL ROM handshake tracker.
struct yaze::emu::Timer Timer