yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
snes.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EMU_SNES_H
2#define YAZE_APP_EMU_SNES_H
3
4#include <cstdint>
5
6#include "app/emu/audio/apu.h"
7#include "app/emu/cpu/cpu.h"
9#include "app/emu/video/ppu.h"
10
11namespace yaze {
12namespace emu {
13
14struct Input {
15 uint8_t type;
17 // for controller
18 uint16_t current_state_; // actual state
20};
21
22class Snes {
23 public:
24 Snes() = default;
25 ~Snes() = default;
26
27 void Init(std::vector<uint8_t>& rom_data);
28 void Reset(bool hard = false);
29 void RunFrame();
30 void CatchUpApu();
31 void HandleInput();
32 void RunCycle();
33 void RunCycles(int cycles);
34 void SyncCycles(bool start, int sync_cycles);
35
36 uint8_t ReadBBus(uint8_t adr);
37 uint8_t ReadReg(uint16_t adr);
38 uint8_t Rread(uint32_t adr);
39 uint8_t Read(uint32_t adr);
40
41 void WriteBBus(uint8_t adr, uint8_t val);
42 void WriteReg(uint16_t adr, uint8_t val);
43 void Write(uint32_t adr, uint8_t val);
44
45 int GetAccessTime(uint32_t adr);
46 uint8_t CpuRead(uint32_t adr);
47 void CpuWrite(uint32_t adr, uint8_t val);
48 void CpuIdle(bool waiting);
49 void InitAccessTime(bool recalc);
50 std::vector<uint8_t> access_time;
51
52 void SetSamples(int16_t* sample_data, int wanted_samples);
53 void SetPixels(uint8_t* pixel_data);
54 void SetButtonState(int player, int button, bool pressed);
55
56 bool running() const { return running_; }
57 auto cpu() -> Cpu& { return cpu_; }
58 auto ppu() -> Ppu& { return ppu_; }
59 auto apu() -> Apu& { return apu_; }
60 auto Memory() -> MemoryImpl& { return memory_; }
61 auto get_ram() -> uint8_t* { return ram; }
62 auto mutable_cycles() -> uint64_t& { return cycles_; }
63
64 private:
67 [&](uint32_t adr) { return CpuRead(adr); },
68 [&](uint32_t adr, uint8_t val) { CpuWrite(adr, val); },
69 [&](bool waiting) { CpuIdle(waiting); },
70 };
74
75 std::vector<uint8_t> rom_data;
76
77 bool running_ = false;
78
79 // ram
80 uint8_t ram[0x20000];
81 uint32_t ram_adr_;
82
83 // Frame timing
84 uint32_t frames_ = 0;
85 uint64_t cycles_ = 0;
86 uint64_t sync_cycle_ = 0;
89
90 // Nmi / Irq
91 bool h_irq_enabled_ = false;
92 bool v_irq_enabled_ = false;
93 bool nmi_enabled_ = false;
94 uint16_t h_timer_ = 0;
95 uint16_t v_timer_ = 0;
96 bool in_nmi_ = false;
97 bool irq_condition_ = false;
98 bool in_irq_ = false;
100
101 // Multiplication / Division
102 uint8_t multiply_a_;
104 uint16_t divide_a_;
106
107 // Joypad State
110 uint16_t port_auto_read_[4]; // as read by auto-joypad read
111 bool auto_joy_read_ = false;
112 uint16_t auto_joy_timer_ = 0;
114
115 bool fast_mem_ = false;
116};
117
118} // namespace emu
119
120} // namespace yaze
121
122#endif // YAZE_APP_EMU_SNES_H
The Apu class represents the Audio Processing Unit (APU) of a system.
Definition apu.h:48
Implementation of the Memory interface for emulating memory in a SNES system.
Definition memory.h:118
bool nmi_enabled_
Definition snes.h:93
uint32_t frames_
Definition snes.h:84
Input input1
Definition snes.h:108
auto mutable_cycles() -> uint64_t &
Definition snes.h:62
void SetSamples(int16_t *sample_data, int wanted_samples)
Definition snes.cc:537
void CatchUpApu()
Definition snes.cc:90
uint8_t Rread(uint32_t adr)
Definition snes.cc:314
uint64_t cycles_
Definition snes.h:85
void RunCycles(int cycles)
Definition snes.cc:224
uint16_t v_timer_
Definition snes.h:95
uint16_t port_auto_read_[4]
Definition snes.h:110
void WriteBBus(uint8_t adr, uint8_t val)
Definition snes.cc:350
uint8_t CpuRead(uint32_t adr)
Definition snes.cc:512
auto ppu() -> Ppu &
Definition snes.h:58
void SetButtonState(int player, int button, bool pressed)
Definition snes.cc:543
uint8_t Read(uint32_t adr)
Definition snes.cc:344
uint16_t h_timer_
Definition snes.h:94
std::vector< uint8_t > access_time
Definition snes.h:50
bool running() const
Definition snes.h:56
bool irq_condition_
Definition snes.h:97
~Snes()=default
bool h_irq_enabled_
Definition snes.h:91
void Reset(bool hard=false)
Definition snes.cc:40
bool fast_mem_
Definition snes.h:115
void RunFrame()
Definition snes.cc:80
uint8_t ReadReg(uint16_t adr)
Definition snes.cc:261
auto apu() -> Apu &
Definition snes.h:59
auto get_ram() -> uint8_t *
Definition snes.h:61
void CpuIdle(bool waiting)
Definition snes.cc:531
uint16_t divide_result_
Definition snes.h:105
void WriteReg(uint16_t adr, uint8_t val)
Definition snes.cc:381
void CpuWrite(uint32_t adr, uint8_t val)
Definition snes.cc:523
bool v_irq_enabled_
Definition snes.h:92
bool in_nmi_
Definition snes.h:96
uint16_t multiply_result_
Definition snes.h:103
uint32_t next_horiz_event
Definition snes.h:88
bool in_irq_
Definition snes.h:98
uint8_t ReadBBus(uint8_t adr)
Definition snes.cc:245
CpuCallbacks cpu_callbacks_
Definition snes.h:66
bool running_
Definition snes.h:77
void Write(uint32_t adr, uint8_t val)
Definition snes.cc:468
auto cpu() -> Cpu &
Definition snes.h:57
uint64_t sync_cycle_
Definition snes.h:86
uint16_t divide_a_
Definition snes.h:104
void InitAccessTime(bool recalc)
Definition snes.cc:560
auto Memory() -> MemoryImpl &
Definition snes.h:60
bool auto_joy_read_
Definition snes.h:111
bool in_vblank_
Definition snes.h:99
void SyncCycles(bool start, int sync_cycles)
Definition snes.cc:234
std::vector< uint8_t > rom_data
Definition snes.h:75
Snes()=default
void Init(std::vector< uint8_t > &rom_data)
Definition snes.cc:28
Input input2
Definition snes.h:109
uint8_t multiply_a_
Definition snes.h:102
void SetPixels(uint8_t *pixel_data)
Definition snes.cc:541
uint8_t ram[0x20000]
Definition snes.h:80
uint16_t auto_joy_timer_
Definition snes.h:112
void HandleInput()
Definition snes.cc:92
MemoryImpl memory_
Definition snes.h:65
void RunCycle()
Definition snes.cc:109
bool ppu_latch_
Definition snes.h:113
uint32_t ram_adr_
Definition snes.h:81
double apu_catchup_cycles_
Definition snes.h:87
int GetAccessTime(uint32_t adr)
Definition snes.cc:498
SNES Emulation and debugging tools.
Definition apu.cc:13
Main namespace for the application.
Definition controller.cc:18
uint16_t current_state_
Definition snes.h:18
bool latch_line_
Definition snes.h:16
uint8_t type
Definition snes.h:15
uint16_t latched_state_
Definition snes.h:19