#pragma once #include "common/bitfield.h" #include "controller.h" #include #include #include #include #include namespace MemoryCardImage { enum : u32 { DATA_SIZE = 128 * 1024, // 1mbit BLOCK_SIZE = 8192, FRAME_SIZE = 128, FRAMES_PER_BLOCK = BLOCK_SIZE / FRAME_SIZE, NUM_BLOCKS = DATA_SIZE / BLOCK_SIZE, NUM_FRAMES = DATA_SIZE / FRAME_SIZE, ICON_WIDTH =16, ICON_HEIGHT = 16 }; using DataArray = std::array; bool LoadFromFile(DataArray* data, const char* filename); bool SaveToFile(const DataArray& data, const char* filename); void Format(DataArray* data); struct IconFrame { u32 pixels[ICON_WIDTH * ICON_HEIGHT]; }; struct FileInfo { std::string filename; std::string title; u32 size; u32 first_block; u32 num_blocks; std::vector icon_frames; }; u32 GetFreeBlockCount(const DataArray& data); std::vector EnumerateFiles(const DataArray& data); bool ReadFile(const DataArray& data, const FileInfo& fi, std::vector* buffer); bool WriteFile(DataArray* data, const std::string_view& filename, const std::vector& buffer); bool DeleteFile(DataArray* data, const FileInfo& fi); bool ImportCard(DataArray* data, const char* filename); }