# HG changeset patch # User Michael Pavone # Date 1495591797 25200 # Node ID 3e7a921718de46f00c0131f4b7921a4114bf787c # Parent 4c5a78555209379576ce8278adf82b6cc2948d10 Fix handling of test register selected sprite layer in border area. Gets rid of the border garbage in the "disco floor/ceiling" scene of OD2 diff -r 4c5a78555209 -r 3e7a921718de vdp.c --- a/vdp.c Tue May 23 09:39:22 2017 -0700 +++ b/vdp.c Tue May 23 19:09:57 2017 -0700 @@ -1494,7 +1494,7 @@ switch(test_layer) { case 1: - //TODO: Display garbage from bus? + bg_color = context->colors[0]; for (int i = 0; i < BORDER_LEFT; i++, dst++) { *dst = bg_color; @@ -1504,10 +1504,6 @@ //plane A //TODO: Deal with Window layer int i; - /*for (i = 0; i < (context->hscroll_a & 0xF) - (16 - BORDER_LEFT); i++, dst++) - { - *dst = bg_color; - }*/ i = 0; uint8_t buf_off = context->buf_a_off - (context->hscroll_a & 0xF) + (16 - BORDER_LEFT); //uint8_t *src = context->tmp_buf_a + ((context->buf_a_off + (i ? 0 : (16 - BORDER_LEFT) - (context->hscroll_a & 0xF))) & SCROLL_BUFFER_MASK); @@ -1520,10 +1516,6 @@ case 3: { //plane B int i; - /*for (i = 0; i < (context->hscroll_b & 0xF) - (16 - BORDER_LEFT); i++, dst++) - { - *dst = bg_color; - }*/ i = 0; uint8_t buf_off = context->buf_b_off - (context->hscroll_b & 0xF) + (16 - BORDER_LEFT); //uint8_t *src = context->tmp_buf_b + ((context->buf_b_off + (i ? 0 : (16 - BORDER_LEFT) - (context->hscroll_b & 0xF))) & SCROLL_BUFFER_MASK); @@ -1773,7 +1765,7 @@ switch(test_layer) { case 1: - //TODO: Display garbage from bus? + bg_color = context->colors[0]; for (int i = 0; i < BORDER_RIGHT; i++, dst++) { *dst = bg_color; @@ -1783,10 +1775,6 @@ //plane A //TODO: Deal with Window layer int i; - /*for (i = 0; i < (context->hscroll_a & 0xF) - (16 - BORDER_LEFT); i++, dst++) - { - *dst = bg_color; - }*/ i = 0; uint8_t buf_off = context->buf_a_off - (context->hscroll_a & 0xF); //uint8_t *src = context->tmp_buf_a + ((context->buf_a_off + (i ? 0 : (16 - BORDER_LEFT) - (context->hscroll_a & 0xF))) & SCROLL_BUFFER_MASK); @@ -1799,10 +1787,6 @@ case 3: { //plane B int i; - /*for (i = 0; i < (context->hscroll_b & 0xF) - (16 - BORDER_LEFT); i++, dst++) - { - *dst = bg_color; - }*/ i = 0; uint8_t buf_off = context->buf_b_off - (context->hscroll_b & 0xF); //uint8_t *src = context->tmp_buf_b + ((context->buf_b_off + (i ? 0 : (16 - BORDER_LEFT) - (context->hscroll_b & 0xF))) & SCROLL_BUFFER_MASK); @@ -1819,6 +1803,7 @@ *dst = bg_color; } } + context->done_output = dst; context->buf_a_off = (context->buf_a_off + SCROLL_BUFFER_DRAW) & SCROLL_BUFFER_MASK; context->buf_b_off = (context->buf_b_off + SCROLL_BUFFER_DRAW) & SCROLL_BUFFER_MASK; } @@ -2568,10 +2553,16 @@ //plane A src_off += context->buf_a_off + context->hscroll_a; src = context->tmp_buf_a; - } else { + } else if (test_layer == 3){ //plane B src_off += context->buf_b_off + context->hscroll_b; src = context->tmp_buf_b; + } else { + //sprite layer + for (; len >=0; len--, dst++, src_off++) + { + *dst = context->colors[0]; + } } for (; len >=0; len--, dst++, src_off++) { @@ -2659,10 +2650,7 @@ } uint8_t test_layer = context->test_port >> 7 & 3; - if (test_layer == 1) { - //sprite layer doesn't do anything interesting in the passive area - test_layer = 0; - } else if (test_layer) { + if (test_layer) { dst = NULL; }