aboutsummaryrefslogtreecommitdiff
path: root/sdk-modifications/libsrc/fs/fatfile_ex.c
diff options
context:
space:
mode:
authorNebuleon Fumika2013-02-03 04:19:11 -0500
committerNebuleon Fumika2013-02-03 04:19:11 -0500
commit8693ae1bd880a758eb2efec4fccd32f89593855d (patch)
tree660b7ceed1789fc904332b96a2a4006b0e4cc6b8 /sdk-modifications/libsrc/fs/fatfile_ex.c
parent02f8184fe07d99cceb85f4abd3ef0e5e3765b5ea (diff)
downloadsnesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.tar.gz
snesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.tar.bz2
snesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.zip
Add SDK modifications by BassAceGold as of 2011-04-14, as well as modified DMA functions as of 2013-01-29.
Diffstat (limited to 'sdk-modifications/libsrc/fs/fatfile_ex.c')
-rw-r--r--sdk-modifications/libsrc/fs/fatfile_ex.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/sdk-modifications/libsrc/fs/fatfile_ex.c b/sdk-modifications/libsrc/fs/fatfile_ex.c
new file mode 100644
index 0000000..aa23fb3
--- /dev/null
+++ b/sdk-modifications/libsrc/fs/fatfile_ex.c
@@ -0,0 +1,47 @@
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <iorpg.h>
+
+#include "cache.h"
+#include "file_allocation_table.h"
+#include "bit_ops.h"
+#include "filetime.h"
+#include "fatfile.h"
+
+// origin fread/fwrite do not take advantage of continuous read/write function of SD/NAND,
+// it looks like the third parameter to _FAT_read_r()/_FAT_write_r() is a fixed '2'
+// so they are much slower than these two....
+
+// due to behavior of _FAT_read_r()/_FAT_write_r(),
+// FAT should have a at least 8192 cluster size to get better performance,
+// 16K or larger cluster size can get the best performance.
+
+
+
+int freadex( void * buffer, int _size, int _n, FILE * f )
+{
+ if( 0 == _n )
+ return 0;
+ dbg_printf("freadx %d\n", _n );
+ struct _reent r;
+ int ret = _FAT_read_r( &r, (int)f->_file + 8, buffer, _size * _n );
+ errno = r._errno;
+ return ret;
+}
+
+
+int fwriteex( const void * buffer, int _size, int _n, FILE * f )
+{
+ if( 0 == _n )
+ return 0;
+ dbg_printf("fwritex new %d\n", _n );
+ struct _reent r;
+ int ret = _FAT_write_r( &r, (int)f->_file + 8, buffer, _size * _n );
+ errno = r._errno;
+ return ret;
+}
+