#include <../base.hpp> #include <../cart/cart.hpp> #include "fatfs.hpp" #include "diskio.h" #include "config.h" void FATFS::init() { command = CMD_NONE; sector = 0; count = 0; retval = -1; scratch_buffer = (unsigned char*)malloc(SHARED_MAX_SIZE); } void FATFS::enable() { // command memory::mmio.map(MMIO_CMD, *this); // sector memory::mmio.map(MMIO_SECTOR01, *this); memory::mmio.map(MMIO_SECTOR02, *this); memory::mmio.map(MMIO_SECTOR03, *this); memory::mmio.map(MMIO_SECTOR04, *this); // count memory::mmio.map(MMIO_COUNT, *this); // return value memory::mmio.map(MMIO_RETVAL, *this); } void FATFS::power() { reset(); } void FATFS::reset() { } void FATFS::fetchMem(unsigned int len) { for ( int i=0;i= MMIO_SECTOR01 && addr <= MMIO_SECTOR04){ sector = data << ( (3 - ( addr - MMIO_SECTOR01)) << 3); #ifdef FATFS_DEBUG printf("FATFS::mmio_write set sector: byte=%i val=%i sector=%i \n",(3 - ( addr - MMIO_SECTOR01)),data,sector); #endif } if (addr == MMIO_COUNT){ count = data; #ifdef FATFS_DEBUG printf("FATFS::mmio_write set count: count=%i \n",count); #endif if (command == CMD_READ) { retval = disk_read (0, (BYTE*)scratch_buffer, sector, count); if (!retval) pushMem(512 * count); } else if (command == CMD_WRITE) { fetchMem(512 * count); retval = disk_write (0, (BYTE*)scratch_buffer, sector, count); } else{ #ifdef FATFS_DEBUG printf("FATFS::mmio_write set offset: no command to trigger \n"); #endif } } if (addr == MMIO_RETVAL){ #ifdef FATFS_DEBUG printf("FATFS::mmio_write reg 0x3016 reset\n"); #endif retval = STA_VOID; } } FATFS::FATFS() { }