22 RamIO(
int sectorCount,
int sectorSize = FF_MAX_SS) {
23 sector_size = sectorSize;
24 sector_count = sectorCount;
28 for (
int j = 0; j <= sector_count; j++) {
37 DSTATUS disk_initialize(BYTE pdrv)
override {
38 if (pdrv != 0)
return STA_NODISK;
40 if (sectors.size() == 0) {
41 for (
int j = 0; j <= sector_count; j++) {
42 uint8_t* ptr =
nullptr;
44 ptr = (uint8_t*)ps_malloc(sector_count * sector_size);
46 if (ptr ==
nullptr) ptr = (uint8_t*)malloc(sector_size);
47 memset(ptr, 0, sector_size);
48 sectors.push_back(ptr);
55 DSTATUS disk_status(BYTE pdrv)
override {
56 if (pdrv != 0)
return STA_NODISK;
60 DRESULT disk_read(BYTE pdrv, BYTE* buffer, LBA_t sectorNo, UINT sectorCount)
override {
61 if (pdrv != 0)
return RES_NOTRDY;
62 if (status == STA_NOINIT)
return RES_NOTRDY;
63 if (sectors.size() == 0 || sectorNo + sectorCount > sector_count) RES_ERROR;
64 for (
int j = sectorNo; j < sectorNo + sectorCount; j++) {
65 int idx = j - sectorNo;
66 uint8_t* source = sectors[j];
67 memcpy(buffer + (idx * sector_size), source , sector_size);
72 DRESULT disk_write(BYTE pdrv,
const BYTE* buffer, LBA_t sectorNo,
73 UINT sectorCount)
override {
74 if (pdrv != 0)
return RES_NOTRDY;
75 if (status == STA_NOINIT)
return RES_NOTRDY;
76 if (sectors.size() == 0 || sectorNo + sectorCount > sector_count) RES_ERROR;
77 for (
int j = sectorNo; j < sectorNo + sectorCount; j++) {
78 int idx = j - sectorNo;
79 uint8_t* target = sectors[j];
80 memcpy(target, buffer + (idx * sector_size), sector_size);
85 DRESULT disk_ioctl(BYTE pdrv, ioctl_cmd_t cmd,
void* buffer)
override {
87 if (pdrv)
return RES_PARERR;
93 case GET_SECTOR_COUNT: {
95 DWORD result = sector_count;
96 memcpy(buffer, &result, (
sizeof(result)));
100 case GET_BLOCK_SIZE: {
103 memcpy(buffer, &result, (
sizeof(result)));
111 memcpy(&range, buffer,
sizeof(range));
113 for (
int j = range[0]; j <= range[1]; j++) {
114 memset(sectors[j], 0, sector_size);
127 std::vector<uint8_t*> sectors;
128 DSTATUS status = STA_NOINIT;
129 int sector_size = 512;
130 size_t sector_count = 0;
131 uint8_t *work_buffer =
nullptr;