comparison vdp.c @ 1917:b91c35bce3e9

Top bits of address register should be cleared on partial command word write. Fixes Mona in 344 bytes demo
author Michael Pavone <pavone@retrodev.com>
date Fri, 03 Apr 2020 23:47:17 -0700
parents 2c742812bcbb
children 039553703c20
comparison
equal deleted inserted replaced
1916:6ece1e2c7a15 1917:b91c35bce3e9
3730 //printf("DMA Fill Address: %X, New CD: %X\n", context->address, context->cd); 3730 //printf("DMA Fill Address: %X, New CD: %X\n", context->address, context->cd);
3731 } 3731 }
3732 } 3732 }
3733 } else { 3733 } else {
3734 uint8_t mode_5 = context->regs[REG_MODE_2] & BIT_MODE_5; 3734 uint8_t mode_5 = context->regs[REG_MODE_2] & BIT_MODE_5;
3735 context->address = (context->address &0xC000) | (value & 0x3FFF); 3735 //contrary to what's in Charles MacDonald's doc, it seems top 2 address bits are cleared
3736 //needed for the Mona in 344 Bytes demo
3737 context->address = value & 0x3FFF;
3736 context->cd = (context->cd & 0x3C) | (value >> 14); 3738 context->cd = (context->cd & 0x3C) | (value >> 14);
3737 if ((value & 0xC000) == 0x8000) { 3739 if ((value & 0xC000) == 0x8000) {
3738 //Register write 3740 //Register write
3739 uint8_t reg = (value >> 8) & 0x1F; 3741 uint8_t reg = (value >> 8) & 0x1F;
3740 if (reg < (mode_5 ? VDP_REGS : 0xB)) { 3742 if (reg < (mode_5 ? VDP_REGS : 0xB)) {