From 8f8fd609dc654bbab6918335daa0bac998e88591 Mon Sep 17 00:00:00 2001 From: Oxore Date: Sat, 25 May 2024 14:19:46 +0300 Subject: Fix the case of SEGA intro cropped in half --- vdp.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vdp.cpp b/vdp.cpp index de4d05d..df8722d 100644 --- a/vdp.cpp +++ b/vdp.cpp @@ -660,10 +660,10 @@ void VDP::writeControl(const uint16_t value) const uint8_t dma_address_mode = (_address_mode >> 4) & 0x3; if (MODESET2_M1_GET(mode_set_2) && dma_address_mode) { const uint16_t destination_address = _address; - const uint16_t transfer_size = - _reg[static_cast(RegID::kDMALengthCounterLow)] | - (_reg[static_cast(RegID::kDMALengthCounterHigh)] << 8); const uint8_t increment = _reg[static_cast(RegID::kAutoIncrement)]; + const uint16_t transfer_size = increment * + (_reg[static_cast(RegID::kDMALengthCounterLow)] | + (_reg[static_cast(RegID::kDMALengthCounterHigh)] << 8)); const uint8_t dma_action = DMASRCADRHIGH_DMD_GET(_reg[static_cast(RegID::kDMASourceAddressHigh)]); switch (dma_action) { @@ -683,7 +683,7 @@ void VDP::writeControl(const uint16_t value) destination_address, transfer_size, increment); - _address += transfer_size * increment / 2; + _address += transfer_size; } break; case 2: -- cgit v1.2.3