29#include <EASTL/functional.h>
118 [[nodiscard]]
bool isIdle()
const {
return !m_busy; }
157 eastl::function<
void(
Error)> &&callback);
162 void fileExists(
Port port,
const char *name,
bool *outExists, eastl::function<
void(
Error)> &&callback);
177 eastl::function<
void(
Error)> &&callback);
213 void writeFile(
Port port,
const char *name,
const char *title,
const Icon &icon,
const void *data,
234 const void *data,
uint32_t dataLen);
240 alignas(4) uint8_t bytes[128];
247 static constexpr uint8_t c_stateFirst = 0x51;
248 static constexpr uint8_t c_stateMiddle = 0x52;
249 static constexpr uint8_t c_stateLast = 0x53;
250 static constexpr uint8_t c_stateFree = 0xa0;
251 static constexpr uint8_t c_stateDeletedFirst = 0xa1;
252 static constexpr uint8_t c_stateDeletedMiddle = 0xa2;
253 static constexpr uint8_t c_stateDeletedLast = 0xa3;
256 static constexpr uint32_t c_offAlloc = 0x00;
257 static constexpr uint32_t c_offSize = 0x04;
258 static constexpr uint32_t c_offNext = 0x08;
259 static constexpr uint32_t c_offName = 0x0a;
260 static constexpr uint32_t c_offChecksum = 0x7f;
261 static constexpr uint32_t c_maxNameLength = 20;
263 static uint8_t frameChecksum(
const uint8_t *frame);
264 static void finishDirEntry(uint8_t *entry);
267 static uint8_t deletedState(uint8_t inUse) {
return static_cast<uint8_t
>((inUse & 0x0f) | 0xa0); }
268 static bool nameMatches(
const uint8_t *entry,
const char *name);
269 static bool findFirstBlock(
const Frame *dir15,
const char *name,
int *outBlock);
273 static uint16_t reachableBlocks(
const Frame *dir15);
278 enum class Op : uint8_t {
290 enum class Phase : uint8_t {
301 enum class StepResult : uint8_t { Continue, Done };
303 void begin(Op op,
Port port, eastl::function<
void(
Error)> &&callback);
304 Error runBlocking(GPU &gpu);
308 void issueOrFinish();
312 void onSectorDone(
Error error);
313 StepResult afterReadDir();
314 void finish(
Error error);
320 bool m_lockHeld =
false;
322 Error m_result = Error::OK;
324 Phase m_phase = Phase::Fail;
325 Port m_port = Port::Port0;
336 bool m_dirty[15] = {};
342 uint8_t m_writeOrder[15] = {};
350 const char *m_name =
nullptr;
351 const char *m_title =
nullptr;
352 void *m_readBuffer =
nullptr;
353 const void *m_writeData =
nullptr;
357 uint32_t *m_outFreeBlocks =
nullptr;
359 bool *m_outExists =
nullptr;
360 FileEntry *m_outEntries =
nullptr;
361 FileInfo *m_outInfo =
nullptr;
The singleton GPU class.
Definition gpu.hh:88
A Sony-compatible memory card filesystem.
Definition memory-card-filesystem.hh:72
Error fileExistsBlocking(GPU &gpu, Port port, const char *name, bool *outExists)
Definition memory-card-filesystem.cpp:744
void format(Port port, eastl::function< void(Error)> &&callback)
Writes a fresh, empty Sony filesystem to the card.
Definition memory-card-filesystem.cpp:645
void readFileInfo(Port port, const char *name, FileInfo *out, eastl::function< void(Error)> &&callback)
Reads a file's title and icon.
Definition memory-card-filesystem.cpp:688
Error deleteFileBlocking(GPU &gpu, Port port, const char *name)
Definition memory-card-filesystem.cpp:781
Error formatBlocking(GPU &gpu, Port port)
Definition memory-card-filesystem.cpp:722
void deleteFile(Port port, const char *name, eastl::function< void(Error)> &&callback)
Deletes a file, freeing all of its blocks.
Definition memory-card-filesystem.cpp:708
void getCardState(Port port, eastl::function< void(Error)> &&callback)
Determines whether a usable, formatted card is present.
Definition memory-card-filesystem.cpp:640
bool isIdle() const
Whether the filesystem is ready to accept a new operation.
Definition memory-card-filesystem.hh:118
void listFiles(Port port, FileEntry *out, uint32_t maxEntries, uint32_t *outCount, eastl::function< void(Error)> &&callback)
Lists the files on the card.
Definition memory-card-filesystem.cpp:658
Error getFreeBlockCountBlocking(GPU &gpu, Port port, uint32_t *outFreeBlocks)
Definition memory-card-filesystem.cpp:727
Error readFileInfoBlocking(GPU &gpu, Port port, const char *name, FileInfo *out)
Definition memory-card-filesystem.cpp:763
void writeFile(Port port, const char *name, const char *title, const Icon &icon, const void *data, uint32_t dataLen, eastl::function< void(Error)> &&callback)
Creates or overwrites a file.
Definition memory-card-filesystem.cpp:696
Error writeFileBlocking(GPU &gpu, Port port, const char *name, const char *title, const Icon &icon, const void *data, uint32_t dataLen)
Definition memory-card-filesystem.cpp:770
void readFile(Port port, const char *name, void *buffer, uint32_t maxLen, uint32_t *outLen, eastl::function< void(Error)> &&callback)
Reads the payload of a file.
Definition memory-card-filesystem.cpp:677
void fileExists(Port port, const char *name, bool *outExists, eastl::function< void(Error)> &&callback)
Reports whether a named file exists, into *outExists.
Definition memory-card-filesystem.cpp:668
Error readFileBlocking(GPU &gpu, Port port, const char *name, void *buffer, uint32_t maxLen, uint32_t *outLen)
Definition memory-card-filesystem.cpp:752
void getFreeBlockCount(Port port, uint32_t *outFreeBlocks, eastl::function< void(Error)> &&callback)
Counts the free 8KiB blocks (0..15) into *outFreeBlocks.
Definition memory-card-filesystem.cpp:650
Error getCardStateBlocking(GPU &gpu, Port port)
Definition memory-card-filesystem.cpp:717
MemoryCardFileSystem(MemoryCard &card)
Definition memory-card-filesystem.hh:113
Error listFilesBlocking(GPU &gpu, Port port, FileEntry *out, uint32_t maxEntries, uint32_t *outCount)
Definition memory-card-filesystem.cpp:734
A low level driver for the PlayStation memory cards.
Definition memory-card.hh:67
Error
The error codes returned by every memory card operation.
Definition memory-card.hh:75
Port
The memory card port to talk to.
Definition memory-card.hh:98
uint32_t out
Definition cpu.c:62
A directory listing entry.
Definition memory-card-filesystem.hh:91
uint16_t sizeInBlocks
Definition memory-card-filesystem.hh:93
char name[21]
Definition memory-card-filesystem.hh:92
uint8_t firstBlock
Definition memory-card-filesystem.hh:94
A file's on-card metadata: its title and icon.
Definition memory-card-filesystem.hh:108
uint8_t title[65]
Definition memory-card-filesystem.hh:109
Icon icon
Definition memory-card-filesystem.hh:110
A save icon, in the native PlayStation format.
Definition memory-card-filesystem.hh:82
uint16_t clut[16]
Definition memory-card-filesystem.hh:84
uint8_t pixels[3][128]
Definition memory-card-filesystem.hh:85
uint8_t frameCount
Definition memory-card-filesystem.hh:83
static void * buffer
Definition syscalls.h:231
void uint32_t(classId, spec)