Mercurial > repos > blastem
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; |