#include "counter.hpp"

class PPU : public PPUcounter, public MMIO {
public:
  virtual void enter() = 0;

  uint16 *output;

  struct {
    bool render_output;

    bool frame_executed;
    bool frames_updated;
    unsigned frames_rendered;
    unsigned frames_executed;
  } status;

  //PPU1 version number
  //* 1 is known
  //* reported by $213e
  uint8 ppu1_version;

  //PPU2 version number
  //* 1 and 3 are known
  //* reported by $213f
  uint8 ppu2_version;

  virtual bool interlace() const = 0;
  virtual bool overscan() const = 0;
  virtual bool hires() const = 0;

  virtual void latch_counters() = 0;

  virtual void frame();
  virtual void power();
  virtual void reset();
  virtual void enable_renderer(bool r);
  virtual bool renderer_enabled();

  PPU();
  virtual ~PPU();
};
