55 lines
		
	
	
		
			824 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			824 B
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| 
 | |
| #include "Cartridge.hpp"
 | |
| #include "CPU/CPU.hpp"
 | |
| #include "Input.hpp"
 | |
| #include "Platform.hpp"
 | |
| #include "PPU/PPU.hpp"
 | |
| #include <memory>
 | |
| 
 | |
| 
 | |
| struct Color
 | |
| {
 | |
| 	Color()
 | |
| 		: r(0), g(0), b(0), a(0)
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	Color(uint8_t r, uint8_t g, uint8_t b)
 | |
| 		: r(r), g(g), b(b), a(255)
 | |
| 	{}
 | |
| 
 | |
| 	uint8_t r, g, b, a;
 | |
| 
 | |
| 	uint32_t GetValue()
 | |
| 	{
 | |
| 		return (r << 24u) | (g << 16u) | (b << 8u) | a;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| enum class BusSource
 | |
| {
 | |
| 	CPU,
 | |
| 	PPU
 | |
| };
 | |
| 
 | |
| class NES
 | |
| {
 | |
| public:
 | |
| 	NES();
 | |
| 	void InsertCartridge(char const* filename);
 | |
| 	void Run();
 | |
| 	void Write(BusSource source, uint16_t address, uint8_t value);
 | |
| 	uint8_t Read(BusSource source, uint16_t address);
 | |
| 
 | |
| 	std::unique_ptr<CPU> cpu;
 | |
| 	std::unique_ptr<PPU> ppu;
 | |
| 	std::unique_ptr<Cartridge> cartridge;
 | |
| 	std::unique_ptr<Platform> platform;
 | |
| 	std::unique_ptr<Input> input;
 | |
| 
 | |
| 	bool nmi{};
 | |
| 	Color palette[64];
 | |
| };
 | |
| 
 |