ComSquare
SNES.hpp
Go to the documentation of this file.
1 //
2 // Created by anonymus-raccoon on 1/27/20.
3 //
4 
5 #pragma once
6 
7 #include "APU/APU.hpp"
8 #include "CPU/CPU.hpp"
11 #include "Memory/MemoryBus.hpp"
12 #include "PPU/PPU.hpp"
13 #include "Ram/Ram.hpp"
14 #include "Renderer/IRenderer.hpp"
15 #include <optional>
16 
17 #ifdef DEBUGGER_ENABLED
22 #include "Debugger/APUDebug.hpp"
23 #include "Debugger/CGramDebug.hpp"
26 #endif
27 
28 
29 namespace ComSquare
30 {
32  class SNES
33  {
34  private:
35 #ifdef DEBUGGER_ENABLED
36  std::optional<Debugger::CPU::CPUDebug> _cpuDebugger;
39  std::optional<Debugger::MemoryBusDebug> _busDebugger;
41  std::optional<Debugger::APU::APUDebug> _apuDebugger;
42 
44  std::optional<Debugger::MemoryViewer> _ramViewer;
46  std::optional<Debugger::HeaderViewer> _headerViewer;
48  std::optional<Debugger::CGramDebug> _cgramViewer;
50  std::optional<Debugger::RegisterViewer> _registerViewer;
52  std::optional<Debugger::TileViewer> _tileViewer;
53 #endif
54  public:
57 
70 
73  explicit SNES(Renderer::IRenderer &renderer);
77  SNES(const std::string &ramPath, Renderer::IRenderer &renderer);
79  SNES(const SNES &) = delete;
81  SNES &operator=(const SNES &) = delete;
83  ~SNES() = default;
84 
86  void update();
87 
91  void loadRom(const std::string& path);
92 
93 #ifdef DEBUGGER_ENABLED
94  void disableCPUDebugging();
97  void enableCPUDebugging(bool pause = false);
100  void enableCPUDebuggingWithError(const DebuggableError &exception);
102  void disableRamViewer();
104  void enableRamViewer();
106  void disableHeaderViewer();
108  void enableHeaderViewer();
110  void disableAPUDebugging();
112  void enableAPUDebugging();
114  void disableMemoryBusDebugging();
116  void enableMemoryBusDebugging();
118  void disableCgramViewer();
120  void enableCgramViewer();
122  void disableRegisterViewer();
124  void enableRegisterViewer();
126  void disableTileViewer();
128  void enableTileViewer();
129 #endif
130  };
131 }// namespace ComSquare
MemoryBusDebug.hpp
MemoryBus.hpp
ComSquare::Ram::Ram
Definition: Ram.hpp:14
ComSquare::Memory::MemoryBus
The memory bus is the component responsible of mapping addresses to components address and transmitti...
Definition: MemoryBus.hpp:22
ComSquare::SNES::operator=
SNES & operator=(const SNES &)=delete
A SNES can't be assigned.
CPU.hpp
ComSquare::CPU::CPU
The main CPU.
Definition: CPU.hpp:26
TileViewer.hpp
ComSquare::SNES::wram
Ram::Ram wram
Work Ram shared by all the components.
Definition: SNES.hpp:61
ComSquare::SNES::bus
Memory::MemoryBus bus
The memory bus that map addresses to components.
Definition: SNES.hpp:56
ComSquare::SNES::cpu
CPU::CPU cpu
Central Processing Unit of the SNES.
Definition: SNES.hpp:65
Cartridge.hpp
ComSquare::SNES::loadRom
void loadRom(const std::string &path)
Load the rom at the given path.
Definition: SNES.cpp:46
APUDebug.hpp
ComSquare::SNES::cartridge
Cartridge::Cartridge cartridge
Cartridge containing instructions (ROM).
Definition: SNES.hpp:59
APU.hpp
ComSquare::SNES::SNES
SNES(Renderer::IRenderer &renderer)
Create all the components using a common memory bus for all of them.
Definition: SNES.cpp:10
ComSquare::SNES
Container of all the components of the SNES.
Definition: SNES.hpp:32
ComSquare::SNES::ppu
PPU::PPU ppu
Picture Processing Unit of the SNES.
Definition: SNES.hpp:67
ComSquare::SNES::apu
APU::APU apu
Audio Processing Unit if the SNES.
Definition: SNES.hpp:69
DebuggableError.hpp
ComSquare::SNES::~SNES
~SNES()=default
A default destructor.
RegisterViewer.hpp
ComSquare::Cartridge::Cartridge
Contains the rom's memory/instructions.
Definition: Cartridge.hpp:78
ComSquare::DebuggableError
Definition: DebuggableError.hpp:11
ComSquare::Renderer::IRenderer
Definition: IRenderer.hpp:15
ComSquare::APU::APU
Definition: APU.hpp:138
CPUDebug.hpp
CGramDebug.hpp
Ram.hpp
MemoryViewer.hpp
ComSquare::SNES::update
void update()
Call this function to update all the components.
Definition: SNES.cpp:34
ComSquare::SNES::sram
Ram::Ram sram
Save Ram residing inside the Cartridge in a real SNES.
Definition: SNES.hpp:63
ComSquare
Definition: APU.cpp:12
HeaderViewer.hpp
IRenderer.hpp
PPU.hpp
ComSquare::PPU::PPU
The class containing all the registers of the PPU.
Definition: PPU.hpp:46