summaryrefslogtreecommitdiff
path: root/vdp.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'vdp.hpp')
-rw-r--r--vdp.hpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/vdp.hpp b/vdp.hpp
index 71f259b..c239273 100644
--- a/vdp.hpp
+++ b/vdp.hpp
@@ -10,18 +10,19 @@
class VDP {
public:
- VDP(const uint32_t base_address_a = VDP_START): base_address(base_address_a) {}
+ constexpr VDP(const uint32_t base_address_a = VDP_START): base_address(base_address_a) {}
uint32_t Read(uint32_t offset, enum bitness);
void Write(uint32_t offset, enum bitness, uint32_t value);
bool Scanline(); // Returns true if display disabled or vblank happened
void Reset();
- const uint32_t* GetRenderedBuffer() const { return _rendered_buffer; }
+ constexpr const uint32_t* GetRenderedBuffer() const { return _rendered_buffer; }
const uint32_t base_address;
- static constexpr size_t render_height = 224;
- static constexpr size_t render_width = 320;
- static constexpr size_t render_buffer_size = 320*224*4;
+ static constexpr size_t kRenderHeight = 224;
+ static constexpr size_t kRenderWidth = 320;
+ static constexpr size_t render_buffer_size = kRenderWidth * kRenderHeight *
+ sizeof(*reinterpret_cast<VDP*>(4)->GetRenderedBuffer());
private:
struct StatusRegister {
@@ -70,6 +71,7 @@ class VDP {
kRegistersCount, ///< Keep it last
};
+ void renderScrollALine(size_t line_index, size_t hcell_count);
void writeData(uint8_t address_mode, uint16_t address, uint16_t value);
void writeControl(uint16_t value);
uint16_t readData(uint8_t address_mode, uint16_t address);
@@ -112,5 +114,5 @@ class VDP {
uint8_t _vram[kVRAMSize]{};
uint8_t _cram[kCRAMSize]{};
uint8_t _vsram[kVSRAMSize]{};
- uint32_t _rendered_buffer[kLinesPerScreenNTSC * render_width]{};
+ uint32_t _rendered_buffer[kLinesPerScreenNTSC * kRenderWidth]{};
};