summaryrefslogtreecommitdiff
path: root/vdp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vdp.cpp')
-rw-r--r--vdp.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/vdp.cpp b/vdp.cpp
index c4bdfa0..08640fa 100644
--- a/vdp.cpp
+++ b/vdp.cpp
@@ -141,11 +141,23 @@ bool VDP::Scanline()
if (!MODESET2_DISP_GET(mode_set_2)) {
return true;
}
- for (size_t i = 0; i < render_width; i++) {
- _rendered_buffer[render_width * _lines_counter + i] = 0xff00ffff;
+ const uint16_t lines_per_screen = _status.pal_mode ? kLinesPerScreenPAL : kLinesPerScreenNTSC;
+ if (_lines_counter + 1 == lines_per_screen) {
+ for (size_t i = 0; i < render_width; i++) {
+ const size_t color_index = (i * 2) % kCRAMSize;
+ const uint16_t cram_color = ((_cram[color_index] & 0x1) << 8) | _cram[color_index + 1];
+ const uint8_t blue = cram_color & 7;
+ const uint8_t green = (cram_color >> 3) & 7;
+ const uint8_t red = (cram_color >> 6) & 7;
+ const uint32_t color = 0xff000000 | (red << 16) | (green << 8) | blue;
+ _rendered_buffer[render_width * _lines_counter + i] = color;
+ }
+ } else {
+ for (size_t i = 0; i < render_width; i++) {
+ _rendered_buffer[render_width * _lines_counter + i] = 0xff000000;
+ }
}
_lines_counter++;
- const uint16_t lines_per_screen = _status.pal_mode ? kLinesPerScreenPAL : kLinesPerScreenNTSC;
if (_lines_counter >= lines_per_screen) {
_lines_counter = 0;
if (MODESET2_IE0_GET(mode_set_2)) {