Mercurial > repos > blastem
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) { |