29#include <EASTL/functional.h>
123 [[nodiscard]]
bool isIdle()
const {
return !m_busy; }
171 eastl::function<
void(
Error)> &&callback);
184 void fileExists(
Port port,
const char *name,
bool *outExists, eastl::function<
void(
Error)> &&callback);
201 void readFile(
Port port,
const char *name,
void *
buffer, uint32_t maxLen, uint32_t *outLen,
202 eastl::function<
void(
Error)> &&callback);
238 void writeFile(
Port port,
const char *name,
const char *title,
const Icon &icon,
const void *data, uint32_t dataLen,
239 eastl::function<
void(
Error)> &&callback);
266 const void *data, uint32_t dataLen);
272 alignas(4) uint8_t bytes[128];
279 static constexpr uint8_t c_stateFirst = 0x51;
280 static constexpr uint8_t c_stateMiddle = 0x52;
281 static constexpr uint8_t c_stateLast = 0x53;
282 static constexpr uint8_t c_stateFree = 0xa0;
283 static constexpr uint8_t c_stateDeletedFirst = 0xa1;
284 static constexpr uint8_t c_stateDeletedMiddle = 0xa2;
285 static constexpr uint8_t c_stateDeletedLast = 0xa3;
288 static constexpr uint32_t c_offAlloc = 0x00;
289 static constexpr uint32_t c_offSize = 0x04;
290 static constexpr uint32_t c_offNext = 0x08;
291 static constexpr uint32_t c_offName = 0x0a;
292 static constexpr uint32_t c_offChecksum = 0x7f;
293 static constexpr uint32_t c_maxNameLength = 20;
295 static uint8_t frameChecksum(
const uint8_t *frame);
296 static void finishDirEntry(uint8_t *entry);
299 static uint8_t deletedState(uint8_t inUse) {
return static_cast<uint8_t
>((inUse & 0x0f) | 0xa0); }
300 static bool nameMatches(
const uint8_t *entry,
const char *name);
301 static bool findFirstBlock(
const Frame *dir15,
const char *name,
int *outBlock);
305 static uint16_t reachableBlocks(
const Frame *dir15);
310 enum class Op : uint8_t {
322 enum class Phase : uint8_t {
334 enum class StepResult : uint8_t { Continue, Done };
336 void begin(Op op,
Port port, eastl::function<
void(
Error)> &&callback);
337 Error runBlocking(GPU &gpu);
341 void issueOrFinish();
346 StepResult afterReadDir();
353 bool m_lockHeld =
false;
354 eastl::function<void(
Error)> m_callback;
355 Error m_result = Error::OK;
357 Phase m_phase = Phase::Fail;
358 Port m_port = Port::Port0;
367 uint32_t m_cardBlocks = 16;
368 uint16_t m_probeSector = 0;
370 uint32_t m_chainLen = 0;
371 uint32_t m_headerFrames = 0;
372 uint32_t m_blocksNeeded = 0;
373 uint32_t m_iconFrames = 0;
374 bool m_dirty[15] = {};
380 uint8_t m_writeOrder[15] = {};
381 uint32_t m_writeOrderLen = 0;
382 uint32_t m_dataOffset = 0;
383 uint32_t m_written = 0;
384 uint32_t m_blockIdx = 0;
385 uint32_t m_frameInBlock = 0;
388 const char *m_name =
nullptr;
389 const char *m_title =
nullptr;
390 void *m_readBuffer =
nullptr;
391 const void *m_writeData =
nullptr;
392 uint32_t m_dataLen = 0;
393 uint32_t m_maxLen = 0;
394 uint32_t *m_outLen =
nullptr;
395 uint32_t *m_outFreeBlocks =
nullptr;
396 uint32_t *m_outCount =
nullptr;
397 bool *m_outExists =
nullptr;
398 FileEntry *m_outEntries =
nullptr;
399 FileInfo *m_outInfo =
nullptr;
400 uint32_t m_maxEntries = 0;
uint8_t error
Definition cdlreadn.c:858
The singleton GPU class.
Definition gpu.hh:83
A Sony-compatible memory card filesystem.
Definition memory-card-filesystem.hh:77
Error fileExistsBlocking(GPU &gpu, Port port, const char *name, bool *outExists)
Definition memory-card-filesystem.cpp:786
void format(Port port, eastl::function< void(Error)> &&callback)
Writes a fresh, empty Sony filesystem to the card.
Definition memory-card-filesystem.cpp:688
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:731
Error deleteFileBlocking(GPU &gpu, Port port, const char *name)
Definition memory-card-filesystem.cpp:823
Error formatBlocking(GPU &gpu, Port port)
Definition memory-card-filesystem.cpp:764
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:751
void getCardState(Port port, eastl::function< void(Error)> &&callback)
Determines whether a usable, formatted card is present.
Definition memory-card-filesystem.cpp:683
bool isIdle() const
Whether the filesystem is ready to accept a new operation.
Definition memory-card-filesystem.hh:123
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:701
Error getFreeBlockCountBlocking(GPU &gpu, Port port, uint32_t *outFreeBlocks)
Definition memory-card-filesystem.cpp:769
Error readFileInfoBlocking(GPU &gpu, Port port, const char *name, FileInfo *out)
Definition memory-card-filesystem.cpp:805
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:739
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:812
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:720
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:711
Error readFileBlocking(GPU &gpu, Port port, const char *name, void *buffer, uint32_t maxLen, uint32_t *outLen)
Definition memory-card-filesystem.cpp:794
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:693
Error getCardStateBlocking(GPU &gpu, Port port)
Definition memory-card-filesystem.cpp:759
MemoryCardFileSystem(MemoryCard &card)
Definition memory-card-filesystem.hh:118
Error listFilesBlocking(GPU &gpu, Port port, FileEntry *out, uint32_t maxEntries, uint32_t *outCount)
Definition memory-card-filesystem.cpp:776
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
Definition pocketstation-memmap.c:256
A directory listing entry.
Definition memory-card-filesystem.hh:96
uint16_t sizeInBlocks
Definition memory-card-filesystem.hh:98
char name[21]
Definition memory-card-filesystem.hh:97
uint8_t firstBlock
Definition memory-card-filesystem.hh:99
A file's on-card metadata: its title and icon.
Definition memory-card-filesystem.hh:113
uint8_t title[65]
Definition memory-card-filesystem.hh:114
Icon icon
Definition memory-card-filesystem.hh:115
A save icon, in the native PlayStation format.
Definition memory-card-filesystem.hh:87
uint16_t clut[16]
Definition memory-card-filesystem.hh:89
uint8_t pixels[3][128]
Definition memory-card-filesystem.hh:90
uint8_t frameCount
Definition memory-card-filesystem.hh:88
static void * buffer
Definition syscalls.h:274