Mercurial > repos > blastem
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)) { |