comparison vdp.c @ 2013:dcdad92f84a4

Multiplying by zero and shifting by zero are very different. Fixes regression in Overdrive 2
author Michael Pavone <pavone@retrodev.com>
date Sun, 01 Nov 2020 13:28:31 -0800
parents 19957e7353a4
children bcc85f6b06c2
comparison
equal deleted inserted replaced
2012:b05295c2ad04 2013:dcdad92f84a4
1158 context->v_offset = vscroll & v_offset_mask; 1158 context->v_offset = vscroll & v_offset_mask;
1159 //printf("%s | line %d, vsram: %d, vscroll: %d, v_offset: %d\n",(vsram_off ? "B" : "A"), line, context->vsram[context->regs[REG_MODE_3] & 0x4 ? column : 0], vscroll, context->v_offset); 1159 //printf("%s | line %d, vsram: %d, vscroll: %d, v_offset: %d\n",(vsram_off ? "B" : "A"), line, context->vsram[context->regs[REG_MODE_3] & 0x4 ? column : 0], vscroll, context->v_offset);
1160 vscroll >>= vscroll_shift; 1160 vscroll >>= vscroll_shift;
1161 //TODO: Verify the behavior for a setting of 2 1161 //TODO: Verify the behavior for a setting of 2
1162 static const uint16_t hscroll_masks[] = {0x1F, 0x3F, 0x1F, 0x7F}; 1162 static const uint16_t hscroll_masks[] = {0x1F, 0x3F, 0x1F, 0x7F};
1163 static const uint16_t v_shifts[] = {6, 7, 0, 8}; 1163 static const uint16_t v_shifts[] = {6, 7, 16, 8};
1164 uint16_t hscroll_mask = hscroll_masks[context->regs[REG_SCROLL] & 0x3]; 1164 uint16_t hscroll_mask = hscroll_masks[context->regs[REG_SCROLL] & 0x3];
1165 uint16_t v_shift = v_shifts[context->regs[REG_SCROLL] & 0x3]; 1165 uint16_t v_shift = v_shifts[context->regs[REG_SCROLL] & 0x3];
1166 uint16_t hscroll, offset; 1166 uint16_t hscroll, offset;
1167 for (int i = 0; i < 2; i++) { 1167 for (int i = 0; i < 2; i++) {
1168 hscroll = (column - 2 + i - ((hscroll_val/8) & 0xFFFE)) & hscroll_mask; 1168 hscroll = (column - 2 + i - ((hscroll_val/8) & 0xFFFE)) & hscroll_mask;