yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::emu::Snes Class Reference

#include <snes.h>

Public Member Functions

 Snes ()
 
 ~Snes ()=default
 
void Init (std::vector< uint8_t > &rom_data)
 
void Reset (bool hard=false)
 
void RunFrame ()
 
void CatchUpApu ()
 
void HandleInput ()
 
void RunCycle ()
 
void RunCycles (int cycles)
 
void SyncCycles (bool start, int sync_cycles)
 
uint8_t ReadBBus (uint8_t adr)
 
uint8_t ReadReg (uint16_t adr)
 
uint8_t Rread (uint32_t adr)
 
uint8_t Read (uint32_t adr)
 
void WriteBBus (uint8_t adr, uint8_t val)
 
void WriteReg (uint16_t adr, uint8_t val)
 
void Write (uint32_t adr, uint8_t val)
 
int GetAccessTime (uint32_t adr)
 
uint8_t CpuRead (uint32_t adr)
 
void CpuWrite (uint32_t adr, uint8_t val)
 
void CpuIdle (bool waiting)
 
void InitAccessTime (bool recalc)
 
void SetSamples (int16_t *sample_data, int wanted_samples)
 
void SetPixels (uint8_t *pixel_data)
 
void SetButtonState (int player, int button, bool pressed)
 
void loadState (const std::string &path)
 
void saveState (const std::string &path)
 
bool running () const
 
auto cpu () -> Cpu &
 
auto ppu () -> Ppu &
 
auto apu () -> Apu &
 
auto memory () -> MemoryImpl &
 
auto get_ram () -> uint8_t *
 
auto mutable_cycles () -> uint64_t &
 
auto apu_handshake_tracker () -> debug::ApuHandshakeTracker &
 

Public Attributes

std::vector< uint8_t > access_time
 
bool fast_mem_ = false
 

Private Attributes

MemoryImpl memory_
 
Cpu cpu_ {memory_}
 
Ppu ppu_ {memory_}
 
Apu apu_ {memory_}
 
std::vector< uint8_t > rom_data
 
bool running_ = false
 
uint8_t ram [0x20000]
 
uint32_t ram_adr_
 
uint32_t frames_ = 0
 
uint64_t cycles_ = 0
 
uint64_t sync_cycle_ = 0
 
double apu_catchup_cycles_
 
uint32_t next_horiz_event
 
bool h_irq_enabled_ = false
 
bool v_irq_enabled_ = false
 
bool nmi_enabled_ = false
 
uint16_t h_timer_ = 0
 
uint16_t v_timer_ = 0
 
bool in_nmi_ = false
 
bool irq_condition_ = false
 
bool in_irq_ = false
 
bool in_vblank_
 
uint8_t multiply_a_
 
uint16_t multiply_result_
 
uint16_t divide_a_
 
uint16_t divide_result_
 
Input input1
 
Input input2
 
uint16_t port_auto_read_ [4]
 
bool auto_joy_read_ = false
 
uint16_t auto_joy_timer_ = 0
 
bool ppu_latch_
 
debug::ApuHandshakeTracker apu_handshake_tracker_
 

Detailed Description

Definition at line 25 of file snes.h.

Constructor & Destructor Documentation

◆ Snes()

yaze::emu::Snes::Snes ( )
inline

Definition at line 27 of file snes.h.

References yaze::emu::Cpu::callbacks(), cpu_, CpuIdle(), CpuRead(), CpuWrite(), input1, and input2.

Here is the call graph for this function:

◆ ~Snes()

yaze::emu::Snes::~Snes ( )
default

Member Function Documentation

◆ Init()

◆ Reset()

◆ RunFrame()

void yaze::emu::Snes::RunFrame ( )

Definition at line 98 of file snes.cc.

References cpu_, frames_, in_vblank_, LOG_DEBUG, yaze::emu::Cpu::PB, yaze::emu::Cpu::PC, and yaze::emu::Cpu::RunOpcode().

Referenced by main(), and yaze::emu::Emulator::Run().

Here is the call graph for this function:

◆ CatchUpApu()

void yaze::emu::Snes::CatchUpApu ( )

Definition at line 131 of file snes.cc.

References apu_, cycles_, and yaze::emu::Apu::RunCycles().

Referenced by ReadBBus(), RunCycle(), and WriteBBus().

Here is the call graph for this function:

◆ HandleInput()

void yaze::emu::Snes::HandleInput ( )

Definition at line 137 of file snes.cc.

References auto_joy_read_, yaze::emu::Input::current_state_, input1, input2, LOG_DEBUG, and port_auto_read_.

Referenced by RunCycle().

◆ RunCycle()

◆ RunCycles()

void yaze::emu::Snes::RunCycles ( int  cycles)

Definition at line 311 of file snes.cc.

References yaze::emu::MemoryImpl::h_pos(), memory_, and RunCycle().

Referenced by CpuIdle(), CpuRead(), CpuWrite(), yaze::emu::DoHdma(), yaze::emu::InitHdma(), SyncCycles(), and yaze::emu::WaitCycle().

Here is the call graph for this function:

◆ SyncCycles()

void yaze::emu::Snes::SyncCycles ( bool  start,
int  sync_cycles 
)

Definition at line 321 of file snes.cc.

References cycles_, RunCycles(), and sync_cycle_.

Referenced by yaze::emu::DoDma(), yaze::emu::DoHdma(), and yaze::emu::InitHdma().

Here is the call graph for this function:

◆ ReadBBus()

uint8_t yaze::emu::Snes::ReadBBus ( uint8_t  adr)

◆ ReadReg()

◆ Rread()

uint8_t yaze::emu::Snes::Rread ( uint32_t  adr)

◆ Read()

uint8_t yaze::emu::Snes::Read ( uint32_t  adr)

Definition at line 463 of file snes.cc.

References memory_, Rread(), and yaze::emu::MemoryImpl::set_open_bus().

Referenced by CpuRead(), yaze::emu::DoHdma(), DungeonTestHarness::GenerateHarnessState(), yaze::emu::InitHdma(), and yaze::emu::TransferByte().

Here is the call graph for this function:

◆ WriteBBus()

void yaze::emu::Snes::WriteBBus ( uint8_t  adr,
uint8_t  val 
)

◆ WriteReg()

◆ Write()

◆ GetAccessTime()

int yaze::emu::Snes::GetAccessTime ( uint32_t  adr)

Definition at line 653 of file snes.cc.

References fast_mem_.

Referenced by InitAccessTime().

◆ CpuRead()

uint8_t yaze::emu::Snes::CpuRead ( uint32_t  adr)

Definition at line 667 of file snes.cc.

References access_time, cpu_, yaze::emu::HandleDma(), memory_, Read(), RunCycles(), and yaze::emu::Cpu::set_int_delay().

Referenced by Snes().

Here is the call graph for this function:

◆ CpuWrite()

void yaze::emu::Snes::CpuWrite ( uint32_t  adr,
uint8_t  val 
)

Definition at line 678 of file snes.cc.

References access_time, cpu_, yaze::emu::HandleDma(), memory_, RunCycles(), yaze::emu::Cpu::set_int_delay(), and Write().

Referenced by Snes().

Here is the call graph for this function:

◆ CpuIdle()

void yaze::emu::Snes::CpuIdle ( bool  waiting)

Definition at line 686 of file snes.cc.

References cpu_, yaze::emu::HandleDma(), memory_, RunCycles(), and yaze::emu::Cpu::set_int_delay().

Referenced by Snes().

Here is the call graph for this function:

◆ InitAccessTime()

void yaze::emu::Snes::InitAccessTime ( bool  recalc)

Definition at line 813 of file snes.cc.

References access_time, and GetAccessTime().

Referenced by Reset().

Here is the call graph for this function:

◆ SetSamples()

void yaze::emu::Snes::SetSamples ( int16_t *  sample_data,
int  wanted_samples 
)

Definition at line 692 of file snes.cc.

References apu_, yaze::emu::Apu::dsp(), memory_, and yaze::emu::MemoryImpl::pal_timing().

Referenced by main(), and yaze::emu::Emulator::Run().

Here is the call graph for this function:

◆ SetPixels()

void yaze::emu::Snes::SetPixels ( uint8_t *  pixel_data)

Definition at line 696 of file snes.cc.

References ppu_, and yaze::emu::Ppu::PutPixels().

Referenced by main(), and yaze::emu::Emulator::Run().

Here is the call graph for this function:

◆ SetButtonState()

void yaze::emu::Snes::SetButtonState ( int  player,
int  button,
bool  pressed 
)

Definition at line 698 of file snes.cc.

References yaze::emu::Input::current_state_, input1, and input2.

Referenced by yaze::emu::input::InputManager::Poll().

◆ loadState()

◆ saveState()

◆ running()

bool yaze::emu::Snes::running ( ) const
inline

Definition at line 70 of file snes.h.

References running_.

Referenced by yaze::emu::Emulator::IsEmulatorReady().

◆ cpu()

◆ ppu()

auto yaze::emu::Snes::ppu ( ) -> Ppu&
inline

Definition at line 72 of file snes.h.

References ppu_.

Referenced by DungeonTestHarness::GenerateHarnessState().

◆ apu()

auto yaze::emu::Snes::apu ( ) -> Apu&
inline

◆ memory()

auto yaze::emu::Snes::memory ( ) -> MemoryImpl&
inline

Definition at line 74 of file snes.h.

References memory_.

Referenced by main(), yaze::emu::Emulator::RenderModernCpuDebugger(), and yaze::emu::Emulator::Run().

◆ get_ram()

auto yaze::emu::Snes::get_ram ( ) -> uint8_t*
inline

Definition at line 75 of file snes.h.

References ram.

◆ mutable_cycles()

auto yaze::emu::Snes::mutable_cycles ( ) -> uint64_t&
inline

◆ apu_handshake_tracker()

auto yaze::emu::Snes::apu_handshake_tracker ( ) -> debug::ApuHandshakeTracker&
inline

Definition at line 79 of file snes.h.

References apu_handshake_tracker_.

Referenced by yaze::test::EmulatorTestSuite::RunApuHandshakeTest().

Member Data Documentation

◆ access_time

std::vector<uint8_t> yaze::emu::Snes::access_time

Definition at line 61 of file snes.h.

Referenced by CpuRead(), CpuWrite(), and InitAccessTime().

◆ fast_mem_

bool yaze::emu::Snes::fast_mem_ = false

Definition at line 81 of file snes.h.

Referenced by GetAccessTime(), loadState(), Reset(), saveState(), and WriteReg().

◆ memory_

MemoryImpl yaze::emu::Snes::memory_
private

◆ cpu_

Cpu yaze::emu::Snes::cpu_ {memory_}
private

◆ ppu_

Ppu yaze::emu::Snes::ppu_ {memory_}
private

Definition at line 86 of file snes.h.

Referenced by Init(), loadState(), ppu(), ReadBBus(), Reset(), RunCycle(), saveState(), SetPixels(), WriteBBus(), and WriteReg().

◆ apu_

Apu yaze::emu::Snes::apu_ {memory_}
private

Definition at line 87 of file snes.h.

Referenced by apu(), CatchUpApu(), Init(), loadState(), ReadBBus(), Reset(), RunCycle(), saveState(), SetSamples(), and WriteBBus().

◆ rom_data

std::vector<uint8_t> yaze::emu::Snes::rom_data
private

Definition at line 89 of file snes.h.

Referenced by Init().

◆ running_

bool yaze::emu::Snes::running_ = false
private

Definition at line 91 of file snes.h.

Referenced by Init(), and running().

◆ ram

uint8_t yaze::emu::Snes::ram[0x20000]
private

Definition at line 94 of file snes.h.

Referenced by get_ram(), loadState(), ReadBBus(), Reset(), Rread(), saveState(), Write(), and WriteBBus().

◆ ram_adr_

uint32_t yaze::emu::Snes::ram_adr_
private

Definition at line 95 of file snes.h.

Referenced by loadState(), ReadBBus(), Reset(), saveState(), and WriteBBus().

◆ frames_

uint32_t yaze::emu::Snes::frames_ = 0
private

Definition at line 98 of file snes.h.

Referenced by Reset(), RunCycle(), and RunFrame().

◆ cycles_

uint64_t yaze::emu::Snes::cycles_ = 0
private

Definition at line 99 of file snes.h.

Referenced by CatchUpApu(), loadState(), mutable_cycles(), ReadBBus(), Reset(), RunCycle(), saveState(), and SyncCycles().

◆ sync_cycle_

uint64_t yaze::emu::Snes::sync_cycle_ = 0
private

Definition at line 100 of file snes.h.

Referenced by loadState(), Reset(), saveState(), and SyncCycles().

◆ apu_catchup_cycles_

double yaze::emu::Snes::apu_catchup_cycles_
private

Definition at line 101 of file snes.h.

Referenced by loadState(), Reset(), and saveState().

◆ next_horiz_event

uint32_t yaze::emu::Snes::next_horiz_event
private

Definition at line 102 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), and saveState().

◆ h_irq_enabled_

bool yaze::emu::Snes::h_irq_enabled_ = false
private

Definition at line 105 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ v_irq_enabled_

bool yaze::emu::Snes::v_irq_enabled_ = false
private

Definition at line 106 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ nmi_enabled_

bool yaze::emu::Snes::nmi_enabled_ = false
private

Definition at line 107 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ h_timer_

uint16_t yaze::emu::Snes::h_timer_ = 0
private

Definition at line 108 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ v_timer_

uint16_t yaze::emu::Snes::v_timer_ = 0
private

Definition at line 109 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ in_nmi_

bool yaze::emu::Snes::in_nmi_ = false
private

Definition at line 110 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ irq_condition_

bool yaze::emu::Snes::irq_condition_ = false
private

Definition at line 111 of file snes.h.

Referenced by loadState(), Reset(), RunCycle(), and saveState().

◆ in_irq_

bool yaze::emu::Snes::in_irq_ = false
private

Definition at line 112 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ in_vblank_

bool yaze::emu::Snes::in_vblank_
private

Definition at line 113 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), RunCycle(), RunFrame(), and saveState().

◆ multiply_a_

uint8_t yaze::emu::Snes::multiply_a_
private

Definition at line 116 of file snes.h.

Referenced by loadState(), Reset(), saveState(), and WriteReg().

◆ multiply_result_

uint16_t yaze::emu::Snes::multiply_result_
private

Definition at line 117 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), saveState(), and WriteReg().

◆ divide_a_

uint16_t yaze::emu::Snes::divide_a_
private

Definition at line 118 of file snes.h.

Referenced by loadState(), Reset(), saveState(), and WriteReg().

◆ divide_result_

uint16_t yaze::emu::Snes::divide_result_
private

Definition at line 119 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), saveState(), and WriteReg().

◆ input1

Input yaze::emu::Snes::input1
private

Definition at line 122 of file snes.h.

Referenced by HandleInput(), ReadReg(), Reset(), Rread(), SetButtonState(), Snes(), and Write().

◆ input2

Input yaze::emu::Snes::input2
private

Definition at line 123 of file snes.h.

Referenced by HandleInput(), Reset(), Rread(), SetButtonState(), Snes(), and Write().

◆ port_auto_read_

uint16_t yaze::emu::Snes::port_auto_read_[4]
private

Definition at line 124 of file snes.h.

Referenced by HandleInput(), loadState(), ReadReg(), Reset(), RunCycle(), and saveState().

◆ auto_joy_read_

bool yaze::emu::Snes::auto_joy_read_ = false
private

Definition at line 125 of file snes.h.

Referenced by HandleInput(), loadState(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ auto_joy_timer_

uint16_t yaze::emu::Snes::auto_joy_timer_ = 0
private

Definition at line 126 of file snes.h.

Referenced by loadState(), ReadReg(), Reset(), RunCycle(), saveState(), and WriteReg().

◆ ppu_latch_

bool yaze::emu::Snes::ppu_latch_
private

Definition at line 127 of file snes.h.

Referenced by loadState(), ReadBBus(), ReadReg(), Reset(), saveState(), and WriteReg().

◆ apu_handshake_tracker_

debug::ApuHandshakeTracker yaze::emu::Snes::apu_handshake_tracker_
private

Definition at line 130 of file snes.h.

Referenced by apu_handshake_tracker(), Init(), and WriteBBus().


The documentation for this class was generated from the following files: