2019-02-13 13:32:21 -05:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "PpuTypes.h"
|
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
class Console;
|
|
|
|
|
2019-02-13 13:32:21 -05:00
|
|
|
class Ppu
|
|
|
|
{
|
|
|
|
private:
|
2019-02-13 18:44:39 -05:00
|
|
|
shared_ptr<Console> _console;
|
|
|
|
|
2019-02-13 13:32:21 -05:00
|
|
|
uint16_t _cycle = 0;
|
|
|
|
uint16_t _scanline = 0;
|
|
|
|
uint32_t _frameCount = 0;
|
|
|
|
bool _nmiFlag = false;
|
2019-02-13 18:44:39 -05:00
|
|
|
bool _enableNmi = false;
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
uint8_t *_vram;
|
|
|
|
uint16_t _vramAddress;
|
|
|
|
uint8_t _vramIncrementValue;
|
|
|
|
uint8_t _vramAddressRemapping;
|
|
|
|
bool _vramAddrIncrementOnSecondReg;
|
|
|
|
|
|
|
|
uint16_t _cgramAddress;
|
2019-02-13 23:03:01 -05:00
|
|
|
uint8_t _cgram[512];
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
uint16_t *_outputBuffers[2];
|
|
|
|
uint16_t *_currentBuffer;
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
LayerConfig _layerConfig[4];
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 23:03:01 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
public:
|
|
|
|
Ppu(shared_ptr<Console> console);
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
PpuState GetState();
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
void Exec();
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
void SendFrame();
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-13 18:44:39 -05:00
|
|
|
uint8_t Read(uint16_t addr);
|
|
|
|
void Write(uint32_t addr, uint8_t value);
|
2019-02-13 13:32:21 -05:00
|
|
|
};
|