Mercurial > repos > blastem
comparison vdp.c @ 480:0737953132ad
Implement HV counter latch
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 17 Sep 2013 09:45:14 -0700 |
parents | 863e868752cf |
children | 1f3450d1129f |
comparison
equal
deleted
inserted
replaced
479:863e868752cf | 480:0737953132ad |
---|---|
1465 if ((value & 0xC000) == 0x8000) { | 1465 if ((value & 0xC000) == 0x8000) { |
1466 //Register write | 1466 //Register write |
1467 uint8_t reg = (value >> 8) & 0x1F; | 1467 uint8_t reg = (value >> 8) & 0x1F; |
1468 if (reg < (context->regs[REG_MODE_2] & BIT_MODE_5 ? VDP_REGS : 0xA)) { | 1468 if (reg < (context->regs[REG_MODE_2] & BIT_MODE_5 ? VDP_REGS : 0xA)) { |
1469 //printf("register %d set to %X\n", reg, value & 0xFF); | 1469 //printf("register %d set to %X\n", reg, value & 0xFF); |
1470 if (reg == REG_MODE_1 && (value & BIT_HVC_LATCH) && !(context->regs[reg] & BIT_HVC_LATCH)) { | |
1471 context->hv_latch = vdp_hv_counter_read(context); | |
1472 } | |
1470 context->regs[reg] = value; | 1473 context->regs[reg] = value; |
1471 if (reg == REG_MODE_2) { | |
1472 //printf("Display is now %s\n", (context->regs[REG_MODE_2] & DISPLAY_ENABLE) ? "enabled" : "disabled"); | |
1473 } | |
1474 if (reg == REG_MODE_4) { | 1474 if (reg == REG_MODE_4) { |
1475 context->double_res = (value & (BIT_INTERLACE | BIT_DOUBLE_RES)) == (BIT_INTERLACE | BIT_DOUBLE_RES); | 1475 context->double_res = (value & (BIT_INTERLACE | BIT_DOUBLE_RES)) == (BIT_INTERLACE | BIT_DOUBLE_RES); |
1476 if (!context->double_res) { | 1476 if (!context->double_res) { |
1477 context->framebuf = context->oddbuf; | 1477 context->framebuf = context->oddbuf; |
1478 } | 1478 } |
1611 return value; | 1611 return value; |
1612 } | 1612 } |
1613 | 1613 |
1614 uint16_t vdp_hv_counter_read(vdp_context * context) | 1614 uint16_t vdp_hv_counter_read(vdp_context * context) |
1615 { | 1615 { |
1616 //TODO: deal with clock adjustemnts handled in vdp_run_context | 1616 if (context->regs[REG_MODE_1] & BIT_HVC_LATCH) { |
1617 return context->hv_latch; | |
1618 } | |
1617 uint32_t line= context->cycles / MCLKS_LINE; | 1619 uint32_t line= context->cycles / MCLKS_LINE; |
1618 if (!line) { | 1620 if (!line) { |
1619 line = 0xFF; | 1621 line = 0xFF; |
1620 } else { | 1622 } else { |
1621 line--; | 1623 line--; |