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);