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);\