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