- size = (bcr >> 16) * (bcr & 0xffff);
- GPU_readDataMem(ptr, size);
- psxCpu->Clear(madr, size);
+ words = (bcr >> 16) * (bcr & 0xffff);
+ words_copy = min(words, words_max);
+ GPU_readDataMem(ptr, words_copy);
+ psxCpu->Clear(madr, words_copy);
+
+ HW_DMA2_MADR = SWAPu32((madr & ~3) + words * 4);