@@ -791,21 +791,39 @@ ssize_t PCSX::Memory::MemoryAsFile::writeAt(const void *src, size_t size, size_t
791791 return ret;
792792}
793793
794- void PCSX::Memory::MemoryAsFile::readBlock (void *dest, size_t size, size_t ptr) {
794+ void PCSX::Memory::MemoryAsFile::readBlock (void *dest_, size_t size, size_t ptr) {
795+ auto dest = reinterpret_cast <uint8_t *>(dest_);
795796 auto block = m_memory->m_readLUT [ptr / c_blockSize];
796797 if (!block) {
797798 memset (dest, 0 , size);
799+ if (m_memory->msanInitialized ()) {
800+ for (size_t i = 0 ; i < size; ++i) {
801+ size_t msanPtr = ptr + i;
802+ if (inMsanRange (msanPtr) && (m_memory->msanGetStatus <1 >(msanPtr) == MsanStatus::OK )) {
803+ dest[i] = m_memory->m_msanRAM [msanPtr - c_msanStart];
804+ }
805+ }
806+ }
798807 return ;
799808 }
800809 auto offset = ptr % c_blockSize;
801810 auto toCopy = std::min (size, c_blockSize - offset);
802811 memcpy (dest, block + offset, toCopy);
803812}
804813
805- void PCSX::Memory::MemoryAsFile::writeBlock (const void *src , size_t size, size_t ptr) {
814+ void PCSX::Memory::MemoryAsFile::writeBlock (const void *src_ , size_t size, size_t ptr) {
806815 // Yes. That's not a bug nor a typo.
816+ auto src = reinterpret_cast <const uint8_t *>(src_);
807817 auto block = m_memory->m_readLUT [ptr / c_blockSize];
808818 if (!block) {
819+ if (m_memory->msanInitialized ()) {
820+ for (size_t i = 0 ; i < size; ++i) {
821+ size_t msanPtr = ptr + i;
822+ if (inMsanRange (msanPtr)) {
823+ m_memory->m_msanRAM [msanPtr - c_msanStart] = src[i];
824+ }
825+ }
826+ }
809827 return ;
810828 }
811829 auto offset = ptr % c_blockSize;
0 commit comments