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

#include <snes.h>

Public Member Functions

 Snes ()=default
 
 ~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)
 
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 &
 

Public Attributes

std::vector< uint8_t > access_time
 

Private Attributes

MemoryImpl memory_
 
CpuCallbacks cpu_callbacks_
 
Cpu cpu_ {memory_, cpu_callbacks_}
 
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_
 
bool fast_mem_ = false
 

Detailed Description

Definition at line 22 of file snes.h.

Constructor & Destructor Documentation

◆ Snes()

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

◆ ~Snes()

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

References rom_data.

Member Function Documentation

◆ Init()

void yaze::emu::Snes::Init ( std::vector< uint8_t > & rom_data)

Definition at line 28 of file snes.cc.

References apu_, memory_, ppu_, Reset(), rom_data, and running_.

Referenced by main().

Here is the call graph for this function:

◆ Reset()

◆ RunFrame()

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

Definition at line 80 of file snes.cc.

References cpu_, frames_, and in_vblank_.

Referenced by main().

◆ CatchUpApu()

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

Definition at line 90 of file snes.cc.

References apu_, and cycles_.

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

◆ HandleInput()

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

Definition at line 92 of file snes.cc.

References input1, input2, and port_auto_read_.

Referenced by RunCycle().

◆ RunCycle()

void yaze::emu::Snes::RunCycle ( )
Todo
this starts a little after start of vblank

Definition at line 109 of file snes.cc.

References apu_, auto_joy_read_, auto_joy_timer_, CatchUpApu(), cpu_, cycles_, frames_, h_irq_enabled_, h_timer_, HandleInput(), in_irq_, in_nmi_, in_vblank_, irq_condition_, memory_, next_horiz_event, nmi_enabled_, ppu_, v_irq_enabled_, and v_timer_.

Referenced by RunCycles().

Here is the call graph for this function:

◆ RunCycles()

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

Definition at line 224 of file snes.cc.

References 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 234 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)

Definition at line 245 of file snes.cc.

References apu_, CatchUpApu(), memory_, ppu_, ppu_latch_, ram, and ram_adr_.

Referenced by Rread(), and yaze::emu::TransferByte().

Here is the call graph for this function:

◆ ReadReg()

uint8_t yaze::emu::Snes::ReadReg ( uint16_t adr)

Definition at line 261 of file snes.cc.

References auto_joy_timer_, cpu_, divide_result_, in_irq_, in_nmi_, in_vblank_, memory_, multiply_result_, port_auto_read_, and ppu_latch_.

Referenced by Rread().

◆ Rread()

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

Definition at line 314 of file snes.cc.

References input1, input2, memory_, ram, ReadBBus(), yaze::emu::ReadDma(), and ReadReg().

Referenced by Read().

Here is the call graph for this function:

◆ Read()

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

Definition at line 344 of file snes.cc.

References memory_, and Rread().

Referenced by CpuRead(), yaze::emu::DoHdma(), 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 )

Definition at line 350 of file snes.cc.

References apu_, CatchUpApu(), ppu_, ram, and ram_adr_.

Referenced by yaze::emu::TransferByte(), and Write().

Here is the call graph for this function:

◆ WriteReg()

void yaze::emu::Snes::WriteReg ( uint16_t adr,
uint8_t val )

◆ Write()

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

Definition at line 468 of file snes.cc.

References input1, input2, memory_, ram, WriteBBus(), yaze::emu::WriteDma(), and WriteReg().

Referenced by CpuWrite(), and yaze::emu::TransferByte().

Here is the call graph for this function:

◆ GetAccessTime()

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

Definition at line 498 of file snes.cc.

References fast_mem_.

Referenced by InitAccessTime().

◆ CpuRead()

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

Definition at line 512 of file snes.cc.

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

Here is the call graph for this function:

◆ CpuWrite()

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

Definition at line 523 of file snes.cc.

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

Here is the call graph for this function:

◆ CpuIdle()

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

Definition at line 531 of file snes.cc.

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

Here is the call graph for this function:

◆ InitAccessTime()

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

Definition at line 560 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 537 of file snes.cc.

References apu_, and memory_.

Referenced by main().

◆ SetPixels()

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

Definition at line 541 of file snes.cc.

References ppu_.

Referenced by main().

◆ SetButtonState()

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

Definition at line 543 of file snes.cc.

References input1, and input2.

◆ running()

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

Definition at line 56 of file snes.h.

References running_.

◆ cpu()

auto yaze::emu::Snes::cpu ( ) -> Cpu&
inline

Definition at line 57 of file snes.h.

References cpu_.

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

◆ ppu()

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

Definition at line 58 of file snes.h.

References ppu_.

◆ apu()

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

Definition at line 59 of file snes.h.

References apu_.

◆ Memory()

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

Definition at line 60 of file snes.h.

References memory_.

Referenced by main().

◆ get_ram()

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

Definition at line 61 of file snes.h.

References ram.

◆ mutable_cycles()

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

Definition at line 62 of file snes.h.

References cycles_.

Member Data Documentation

◆ access_time

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

Definition at line 50 of file snes.h.

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

◆ memory_

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

◆ cpu_callbacks_

CpuCallbacks yaze::emu::Snes::cpu_callbacks_
private
Initial value:
= {
[&](uint32_t adr) { return CpuRead(adr); },
[&](uint32_t adr, uint8_t val) { CpuWrite(adr, val); },
[&](bool waiting) { CpuIdle(waiting); },
}
uint8_t CpuRead(uint32_t adr)
Definition snes.cc:512
void CpuIdle(bool waiting)
Definition snes.cc:531
void CpuWrite(uint32_t adr, uint8_t val)
Definition snes.cc:523

Definition at line 66 of file snes.h.

◆ cpu_

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

Definition at line 71 of file snes.h.

Referenced by cpu(), CpuIdle(), CpuRead(), CpuWrite(), ReadReg(), Reset(), RunCycle(), RunFrame(), and WriteReg().

◆ ppu_

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

Definition at line 72 of file snes.h.

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

◆ apu_

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

Definition at line 73 of file snes.h.

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

◆ rom_data

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

Definition at line 75 of file snes.h.

Referenced by Init(), and ~Snes().

◆ running_

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

Definition at line 77 of file snes.h.

Referenced by Init(), and running().

◆ ram

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

Definition at line 80 of file snes.h.

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

◆ ram_adr_

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

Definition at line 81 of file snes.h.

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

◆ frames_

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

Definition at line 84 of file snes.h.

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

◆ cycles_

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

Definition at line 85 of file snes.h.

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

◆ sync_cycle_

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

Definition at line 86 of file snes.h.

Referenced by Reset(), and SyncCycles().

◆ apu_catchup_cycles_

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

Definition at line 87 of file snes.h.

Referenced by Reset().

◆ next_horiz_event

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

Definition at line 88 of file snes.h.

Referenced by Reset(), and RunCycle().

◆ h_irq_enabled_

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

Definition at line 91 of file snes.h.

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

◆ v_irq_enabled_

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

Definition at line 92 of file snes.h.

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

◆ nmi_enabled_

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

Definition at line 93 of file snes.h.

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

◆ h_timer_

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

Definition at line 94 of file snes.h.

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

◆ v_timer_

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

Definition at line 95 of file snes.h.

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

◆ in_nmi_

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

Definition at line 96 of file snes.h.

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

◆ irq_condition_

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

Definition at line 97 of file snes.h.

Referenced by Reset(), and RunCycle().

◆ in_irq_

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

Definition at line 98 of file snes.h.

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

◆ in_vblank_

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

Definition at line 99 of file snes.h.

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

◆ multiply_a_

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

Definition at line 102 of file snes.h.

Referenced by Reset(), and WriteReg().

◆ multiply_result_

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

Definition at line 103 of file snes.h.

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

◆ divide_a_

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

Definition at line 104 of file snes.h.

Referenced by Reset(), and WriteReg().

◆ divide_result_

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

Definition at line 105 of file snes.h.

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

◆ input1

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

Definition at line 108 of file snes.h.

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

◆ input2

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

Definition at line 109 of file snes.h.

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

◆ port_auto_read_

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

Definition at line 110 of file snes.h.

Referenced by HandleInput(), ReadReg(), and Reset().

◆ auto_joy_read_

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

Definition at line 111 of file snes.h.

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

◆ auto_joy_timer_

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

Definition at line 112 of file snes.h.

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

◆ ppu_latch_

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

Definition at line 113 of file snes.h.

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

◆ fast_mem_

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

Definition at line 115 of file snes.h.

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


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