MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / PS1Write

Method PS1Write

pcsx2/SIO/Memcard/MemoryCardProtocol.cpp:333–401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

331}
332
333u8 MemoryCardProtocol::PS1Write(u8 data)
334{
335 MC_LOG.WriteLn("%s", __FUNCTION__);
336 bool sendAck = true;
337 u8 ret = 0;
338
339 switch (ps1McState.currentByte)
340 {
341 case 2:
342 ret = 0x5a;
343 break;
344 case 3:
345 ret = 0x5d;
346 break;
347 case 4:
348 ps1McState.sectorAddrMSB = data;
349 ret = 0x00;
350 break;
351 case 5:
352 ps1McState.sectorAddrLSB = data;
353 ret = 0x00;
354 RecalculatePS1Addr();
355 break;
356 case 134:
357 ps1McState.expectedChecksum = data;
358 ret = 0;
359 break;
360 case 135:
361 ret = 0x5c;
362 break;
363 case 136:
364 ret = 0x5d;
365 break;
366 case 137:
367 if (!mcd->goodSector)
368 {
369 ret = 0xff;
370 }
371 else if (ps1McState.expectedChecksum != ps1McState.checksum)
372 {
373 ret = 0x4e;
374 }
375 else
376 {
377 mcd->Write(ps1McState.buf.data(), ps1McState.buf.size());
378 ret = 0x47;
379 // Clear the "directory unread" bit of the flag byte. Per no$psx, this is cleared
380 // on writes, not reads.
381 mcd->FLAG &= 0x07;
382 }
383
384 sendAck = false;
385 break;
386 case 6:
387 ps1McState.checksum = ps1McState.sectorAddrMSB ^ ps1McState.sectorAddrLSB;
388 [[fallthrough]];
389 default:
390 ps1McState.buf[ps1McState.currentByte - 6] = data;

Callers 2

MemcardMethod · 0.80
MemcardMethod · 0.80

Calls 6

SetBusyFunction · 0.85
SetAcknowledgeMethod · 0.80
WriteLnMethod · 0.45
WriteMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected