Mercurial > repos > blastem
comparison vdp.c @ 25:4d0c20ad815a
Fix vertical scroll value for plane B
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Dec 2012 16:16:18 -0800 |
parents | 30ae73f96267 |
children | a7c2b92d8056 |
comparison
equal
deleted
inserted
replaced
24:30ae73f96267 | 25:4d0c20ad815a |
---|---|
127 void external_slot(vdp_context * context) | 127 void external_slot(vdp_context * context) |
128 { | 128 { |
129 //TODO: Implement me | 129 //TODO: Implement me |
130 } | 130 } |
131 | 131 |
132 void read_map_scroll(uint16_t column, uint32_t line, uint16_t address, uint16_t hscroll_val, vdp_context * context) | 132 void read_map_scroll(uint16_t column, uint16_t vsram_off, uint32_t line, uint16_t address, uint16_t hscroll_val, vdp_context * context) |
133 { | 133 { |
134 uint16_t vscroll; | 134 uint16_t vscroll; |
135 switch(context->regs[REG_SCROLL] & 0x30) | 135 switch(context->regs[REG_SCROLL] & 0x30) |
136 { | 136 { |
137 case 0: | 137 case 0: |
146 break; | 146 break; |
147 case 0x30: | 147 case 0x30: |
148 vscroll = 0x3FF; | 148 vscroll = 0x3FF; |
149 break; | 149 break; |
150 } | 150 } |
151 vscroll &= (context->vsram[context->regs[REG_MODE_3] & 0x4 ? column : 0] + line); | 151 vscroll &= (context->vsram[(context->regs[REG_MODE_3] & 0x4 ? column : 0) + vsram_off] + line); |
152 context->v_offset = vscroll & 0x7; | 152 context->v_offset = vscroll & 0x7; |
153 printf("BG | line %d, vsram: %d, vscroll: %d, v_offset: %d\n", line, context->vsram[context->regs[REG_MODE_3] & 0x4 ? column : 0], vscroll, context->v_offset); | 153 printf("BG | line %d, vsram: %d, vscroll: %d, v_offset: %d\n", line, context->vsram[context->regs[REG_MODE_3] & 0x4 ? column : 0], vscroll, context->v_offset); |
154 vscroll /= 8; | 154 vscroll /= 8; |
155 uint16_t hscroll_mask; | 155 uint16_t hscroll_mask; |
156 uint16_t v_mul; | 156 uint16_t v_mul; |
183 context->col_2 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; | 183 context->col_2 = (context->vdpmem[offset] << 8) | context->vdpmem[offset+1]; |
184 } | 184 } |
185 | 185 |
186 void read_map_scroll_a(uint16_t column, uint32_t line, vdp_context * context) | 186 void read_map_scroll_a(uint16_t column, uint32_t line, vdp_context * context) |
187 { | 187 { |
188 read_map_scroll(column, line, (context->regs[REG_SCROLL_A] & 0x38) << 10, context->hscroll_a, context); | 188 read_map_scroll(column, 0, line, (context->regs[REG_SCROLL_A] & 0x38) << 10, context->hscroll_a, context); |
189 } | 189 } |
190 | 190 |
191 void read_map_scroll_b(uint16_t column, uint32_t line, vdp_context * context) | 191 void read_map_scroll_b(uint16_t column, uint32_t line, vdp_context * context) |
192 { | 192 { |
193 read_map_scroll(column, line, (context->regs[REG_SCROLL_B] & 0x7) << 13, context->hscroll_b, context); | 193 read_map_scroll(column, 1, line, (context->regs[REG_SCROLL_B] & 0x7) << 13, context->hscroll_b, context); |
194 } | 194 } |
195 | 195 |
196 void render_map(uint16_t col, uint8_t * tmp_buf, vdp_context * context) | 196 void render_map(uint16_t col, uint8_t * tmp_buf, vdp_context * context) |
197 { | 197 { |
198 uint16_t address = ((col & 0x3FF) << 5); | 198 uint16_t address = ((col & 0x3FF) << 5); |