initial commit

This commit is contained in:
Lauchmelder 2022-02-28 16:04:25 +01:00
commit ff8389a76b
No known key found for this signature in database
GPG key ID: C2403C69D78F011D
46 changed files with 9118 additions and 0 deletions

90
src/PPU.hpp Normal file
View file

@ -0,0 +1,90 @@
#pragma once
#include "Types.hpp"
class Bus;
class PPU
{
friend class PPUWatcher;
public:
PPU(Bus* bus);
void Powerup();
void Reset();
void Tick();
Byte ReadRegister(Byte id);
void WriteRegister(Byte id, Byte val);
inline bool IsFrameDone() { bool returnVal = isFrameDone; isFrameDone = false; return returnVal; }
private:
Byte Read(Word addr);
void Write(Word addr, Byte val);
private: // Registers
union
{
struct
{
Byte BaseNametableAddr : 2;
Byte VRAMAddrIncrement : 1;
Byte SpritePatternTableAddr : 1;
Byte BackgrPatternTableAddr : 1;
Byte SpriteSize : 1;
Byte MasterSlaveSelect : 1;
Byte VBlankNMI : 1;
} Flag;
Byte Raw;
} ppuctrl;
union
{
struct
{
Byte Greyscale : 1;
Byte BackgroundOnLeft : 1;
Byte SpriteOnLeft : 1;
Byte ShowBackground : 1;
Byte ShowSprites : 1;
Byte EmphasizeRed : 1;
Byte EmphasizeGreen : 1;
Byte EmphasizeBlue : 1;
} Flag;
Byte Raw;
} ppumask;
union
{
struct
{
Byte Unused : 5;
Byte SpriteOverflow : 1;
Byte SpriteZeroHit : 1;
Byte VBlankStarted : 1;
} Flag;
Byte Raw;
} ppustatus;
struct
{
Byte x;
Byte y;
} ppuscroll;
Address ppuaddr;
uint16_t x, y;
Byte addressLatch = 0;
private:
bool isFrameDone = false;
Bus* bus;
};