55 lines
931 B
C++
55 lines
931 B
C++
#pragma once
|
|
|
|
#include "Registers.hpp"
|
|
#include <cstdint>
|
|
|
|
|
|
class NES;
|
|
|
|
|
|
const unsigned int VRAM_SIZE = 2048u;
|
|
const unsigned int VIDEO_WIDTH = 256u;
|
|
const unsigned int VIDEO_HEIGHT = 240u;
|
|
|
|
|
|
class PPU
|
|
{
|
|
public:
|
|
void Cycle(uint8_t cpuCyclesElapsed);
|
|
void WriteRegister(PpuRegister reg, uint8_t value);
|
|
uint8_t ReadRegister(PpuRegister reg);
|
|
|
|
void WriteMemory(uint16_t address, uint8_t value);
|
|
uint8_t ReadMemory(uint16_t address);
|
|
|
|
private:
|
|
friend class NES;
|
|
|
|
PpuRegisterCTRL ppuCtrl{};
|
|
PpuRegisterMask ppuMask{};
|
|
PpuRegisterStatus ppuStatus{};
|
|
uint8_t oamAddr{};
|
|
uint8_t oamData{};
|
|
uint8_t oam[256]{};
|
|
uint8_t ppuScroll{};
|
|
uint16_t ppuAddr{};
|
|
uint8_t ppuData{};
|
|
|
|
bool ppuAddrW{};
|
|
|
|
uint8_t regV{};
|
|
uint8_t regT{};
|
|
uint8_t regX{};
|
|
uint8_t regW{};
|
|
|
|
uint16_t cycles{};
|
|
uint16_t scanline{};
|
|
|
|
uint8_t ram[VRAM_SIZE]{};
|
|
uint8_t paletteIndexes[32]{};
|
|
|
|
uint32_t video[VIDEO_WIDTH * VIDEO_HEIGHT]{};
|
|
|
|
NES* nes;
|
|
};
|