MCPcopy Create free account
hub / github.com/aldelaro5/dolphin-memory-engine / writeToRAM

Method writeToRAM

Source/DolphinProcess/Mac/MacDolphinProcess.cpp:249–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

247}
248
249bool MacDolphinProcess::writeToRAM(const u32 offset, const char* buffer, const size_t size,
250 const bool withBSwap)
251{
252 u64 RAMAddress = 0;
253 if (m_ARAMAccessible)
254 {
255 if (offset >= Common::ARAM_FAKESIZE)
256 RAMAddress = m_emuRAMAddressStart + offset - Common::ARAM_FAKESIZE;
257 else
258 RAMAddress = m_emuARAMAdressStart + offset;
259 }
260 else if (offset >= (Common::MEM2_START - Common::MEM1_START))
261 {
262 RAMAddress = m_MEM2AddressStart + offset - (Common::MEM2_START - Common::MEM1_START);
263 }
264 else
265 {
266 RAMAddress = m_emuRAMAddressStart + offset;
267 }
268
269 char* bufferCopy = new char[size];
270 std::memcpy(bufferCopy, buffer, size);
271
272 if (withBSwap)
273 {
274 switch (size)
275 {
276 case 2:
277 {
278 u16 halfword = 0;
279 std::memcpy(&halfword, bufferCopy, sizeof(u16));
280 halfword = Common::bSwap16(halfword);
281 std::memcpy(bufferCopy, &halfword, sizeof(u16));
282 break;
283 }
284 case 4:
285 {
286 u32 word = 0;
287 std::memcpy(&word, bufferCopy, sizeof(u32));
288 word = Common::bSwap32(word);
289 std::memcpy(bufferCopy, &word, sizeof(u32));
290 break;
291 }
292 case 8:
293 {
294 u64 doubleword = 0;
295 std::memcpy(&doubleword, bufferCopy, sizeof(u64));
296 doubleword = Common::bSwap64(doubleword);
297 std::memcpy(bufferCopy, &doubleword, sizeof(u64));
298 break;
299 }
300 default:
301 break;
302 }
303 }
304
305 if (vm_write(m_task, RAMAddress, reinterpret_cast<vm_offset_t>(bufferCopy),
306 static_cast<mach_msg_type_number_t>(size)) != KERN_SUCCESS)

Callers

nothing calls this directly

Calls 3

bSwap16Function · 0.85
bSwap32Function · 0.85
bSwap64Function · 0.85

Tested by

no test coverage detected