comparison vdp.c @ 29:9477d1289595

Fix horizontal scroll offset
author Mike Pavone <pavone@retrodev.com>
date Sat, 08 Dec 2012 19:59:32 -0800
parents 037963b4c92d
children 03f9bb57cc54
comparison
equal deleted inserted replaced
28:037963b4c92d 29:9477d1289595
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 /*
182 uint16_t hscroll = (hscroll_val + (column-2) * 8) & hscroll_mask;
183 uint16_t offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF);
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);
185 context->col_1 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1];
186 hscroll = (hscroll_val + (column-1) * 8) & hscroll_mask;
187 offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF);
188 context->col_2 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1];
189 */
190 uint16_t hscroll, offset; 181 uint16_t hscroll, offset;
191 for (int i = 0; i < 2; i++) { 182 for (int i = 0; i < 2; i++) {
192 hscroll = (hscroll_val + (column-(2-i)) * 8) & hscroll_mask; 183 hscroll = (hscroll_val + (column-(0-i)) * 8) & hscroll_mask;
193 offset = address + ((vscroll * v_mul + hscroll/4) & 0x1FFF); 184 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); 185 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-(2-i)), hscroll, hscroll_mask, v_mul, context->regs[REG_SCROLL], offset);
195 uint16_t col_val = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; 186 uint16_t col_val = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1];
196 if (i) { 187 if (i) {
197 context->col_2 = col_val; 188 context->col_2 = col_val;
198 } else { 189 } else {
199 context->col_1 = col_val; 190 context->col_1 = col_val;
270 { 261 {
271 end = dst + 8; 262 end = dst + 8;
272 } else {*/ 263 } else {*/
273 end = dst + 16; 264 end = dst + 16;
274 //} 265 //}
266 printf("A | tmp_buf offset: %d\n", 8 - (context->hscroll_a & 0x7));
275 for (; dst < end; ++plane_a, ++plane_b, ++sprite_buf, ++dst) { 267 for (; dst < end; ++plane_a, ++plane_b, ++sprite_buf, ++dst) {
276 uint8_t pixel; 268 uint8_t pixel;
277 if (*sprite_buf & BUF_BIT_PRIORITY && *sprite_buf & 0xF) { 269 if (*sprite_buf & BUF_BIT_PRIORITY && *sprite_buf & 0xF) {
278 pixel = *sprite_buf; 270 pixel = *sprite_buf;
279 } else if (*plane_a & BUF_BIT_PRIORITY && *plane_a & 0xF) { 271 } else if (*plane_a & BUF_BIT_PRIORITY && *plane_a & 0xF) {