46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#include "./ramblk.h"
|
|
#include "../../../memory/memory.h"
|
|
#include "../blk.h"
|
|
|
|
#define RAMFS_BYTES (1024 * 1024 * 5) // 5 MB
|
|
#define SECTOR_SIZE (512)
|
|
|
|
char ramfs_blocks[RAMFS_BYTES];
|
|
|
|
uint32_t RAMBLK__read_sector(uint32_t device, uint32_t sector, char *out) {
|
|
if (sector * SECTOR_SIZE >= RAMFS_BYTES) {
|
|
// Out of bounds
|
|
return 0;
|
|
}
|
|
|
|
uint32_t byte = sector * SECTOR_SIZE;
|
|
|
|
memcpy(ramfs_blocks + byte, out, SECTOR_SIZE);
|
|
return 1;
|
|
}
|
|
|
|
uint32_t RAMBLK__write_sector(uint32_t device, uint32_t sector, char *in) {
|
|
if ((sector + 1) * SECTOR_SIZE >= RAMFS_BYTES) {
|
|
// Out of bounds
|
|
return 0;
|
|
}
|
|
|
|
uint32_t byte = sector * SECTOR_SIZE;
|
|
|
|
memcpy(in, ramfs_blocks + byte, SECTOR_SIZE);
|
|
return 1;
|
|
}
|
|
|
|
void RAMBLK__init() {
|
|
memset(ramfs_blocks, 0x00, RAMFS_BYTES);
|
|
struct block_dev bd = {
|
|
.name = "RAM_BLK",
|
|
.sector_size = SECTOR_SIZE,
|
|
.device_no = 0,
|
|
.num_sectors = RAMFS_BYTES / SECTOR_SIZE,
|
|
.read_sector = &RAMBLK__read_sector,
|
|
.write_sector = &RAMBLK__write_sector
|
|
};
|
|
BLK__register_device(&bd);
|
|
}
|