2020-09-18 14:26:19 +00:00
|
|
|
#pragma once
|
|
|
|
#include "common/bitfield.h"
|
|
|
|
#include "controller.h"
|
|
|
|
#include <array>
|
|
|
|
#include <memory>
|
|
|
|
#include <string>
|
|
|
|
#include <string_view>
|
|
|
|
#include <vector>
|
|
|
|
|
2021-03-05 04:50:20 +00:00
|
|
|
namespace MemoryCardImage {
|
2020-09-18 14:26:19 +00:00
|
|
|
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,
|
2021-03-05 04:50:20 +00:00
|
|
|
ICON_WIDTH = 16,
|
2020-09-18 14:26:19 +00:00
|
|
|
ICON_HEIGHT = 16
|
|
|
|
};
|
|
|
|
|
|
|
|
using DataArray = std::array<u8, DATA_SIZE>;
|
|
|
|
|
|
|
|
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<IconFrame> icon_frames;
|
|
|
|
};
|
|
|
|
|
2021-03-20 14:10:32 +00:00
|
|
|
bool IsValid(const DataArray& data);
|
2020-09-18 14:26:19 +00:00
|
|
|
u32 GetFreeBlockCount(const DataArray& data);
|
|
|
|
std::vector<FileInfo> EnumerateFiles(const DataArray& data);
|
|
|
|
bool ReadFile(const DataArray& data, const FileInfo& fi, std::vector<u8>* buffer);
|
|
|
|
bool WriteFile(DataArray* data, const std::string_view& filename, const std::vector<u8>& buffer);
|
|
|
|
bool DeleteFile(DataArray* data, const FileInfo& fi);
|
|
|
|
bool ImportCard(DataArray* data, const char* filename);
|
2021-03-20 14:10:32 +00:00
|
|
|
bool ImportCard(DataArray* data, const char* filename, std::vector<u8> file_data);
|
2021-03-05 04:50:20 +00:00
|
|
|
bool ExportSave(DataArray* data, const FileInfo& fi, const char* filename);
|
|
|
|
bool ImportSave(DataArray* data, const char* filename);
|
|
|
|
} // namespace MemoryCardImage
|