Mercurial > repos > blastem
comparison vdp.c @ 28:037963b4c92d
Fix BG plane B render bug
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Dec 2012 19:42:07 -0800 |
parents | aa1c47fab3f1 |
children | 9477d1289595 |
comparison
equal
deleted
inserted
replaced
27:aa1c47fab3f1 | 28:037963b4c92d |
---|---|
176 case 0x3: | 176 case 0x3: |
177 hscroll_mask = 0x3F8; | 177 hscroll_mask = 0x3F8; |
178 v_mul = 256; | 178 v_mul = 256; |
179 break; | 179 break; |
180 } | 180 } |
181 /* | |
181 uint16_t hscroll = (hscroll_val + (column-2) * 8) & hscroll_mask; | 182 uint16_t hscroll = (hscroll_val + (column-2) * 8) & hscroll_mask; |
182 uint16_t offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); | 183 uint16_t offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); |
183 //printf("%s | line: %d, col: %d, x: %d, hs_mask %X, v_mul: %d, scr reg: %X, tbl addr: %X\n", (vsram_off ? "B" : "A"), line, column, hscroll, hscroll_mask, v_mul, context->regs[REG_SCROLL], offset); | 184 //printf("%s | line: %d, col: %d, x: %d, hs_mask %X, v_mul: %d, scr reg: %X, tbl addr: %X\n", (vsram_off ? "B" : "A"), line, column, hscroll, hscroll_mask, v_mul, context->regs[REG_SCROLL], offset); |
184 context->col_1 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; | 185 context->col_1 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; |
185 hscroll = (hscroll_val + (column-1) * 8) & hscroll_mask; | 186 hscroll = (hscroll_val + (column-1) * 8) & hscroll_mask; |
186 offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); | 187 offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); |
187 context->col_2 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; | 188 context->col_2 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; |
189 */ | |
190 uint16_t hscroll, offset; | |
191 for (int i = 0; i < 2; i++) { | |
192 hscroll = (hscroll_val + (column-(2-i)) * 8) & hscroll_mask; | |
193 offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); | |
194 //printf("%s | line: %d, col: %d, x: %d, hs_mask %X, v_mul: %d, scr reg: %X, tbl addr: %X\n", (vsram_off ? "B" : "A"), line, column, hscroll, hscroll_mask, v_mul, context->regs[REG_SCROLL], offset); | |
195 uint16_t col_val = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; | |
196 if (i) { | |
197 context->col_2 = col_val; | |
198 } else { | |
199 context->col_1 = col_val; | |
200 } | |
201 } | |
188 } | 202 } |
189 | 203 |
190 void read_map_scroll_a(uint16_t column, uint32_t line, vdp_context * context) | 204 void read_map_scroll_a(uint16_t column, uint32_t line, vdp_context * context) |
191 { | 205 { |
192 read_map_scroll(column, 0, line, (context->regs[REG_SCROLL_A] & 0x38) << 10, context->hscroll_a, context); | 206 read_map_scroll(column, 0, line, (context->regs[REG_SCROLL_A] & 0x38) << 10, context->hscroll_a, context); |
286 } | 300 } |
287 | 301 |
288 uint16_t remaining = context->hscroll_a & 0x7; | 302 uint16_t remaining = context->hscroll_a & 0x7; |
289 memcpy(context->tmp_buf_a + 8 - remaining, context->tmp_buf_a + 24 - remaining, remaining); | 303 memcpy(context->tmp_buf_a + 8 - remaining, context->tmp_buf_a + 24 - remaining, remaining); |
290 remaining = context->hscroll_b & 0x7; | 304 remaining = context->hscroll_b & 0x7; |
291 memcpy(context->tmp_buf_b + 8 - remaining, context->tmp_buf_a + 24 - remaining, remaining); | 305 memcpy(context->tmp_buf_b + 8 - remaining, context->tmp_buf_b + 24 - remaining, remaining); |
292 } | 306 } |
293 | 307 |
294 #define COLUMN_RENDER_BLOCK(column, startcyc) \ | 308 #define COLUMN_RENDER_BLOCK(column, startcyc) \ |
295 case startcyc:\ | 309 case startcyc:\ |
296 read_map_scroll_a(column, line, context);\ | 310 read_map_scroll_a(column, line, context);\ |