diff --git a/snes/fatfstest/Makefile b/snes/fatfstest/Makefile index a780900..12728b6 100644 --- a/snes/fatfstest/Makefile +++ b/snes/fatfstest/Makefile @@ -7,7 +7,7 @@ ifeq ($(PLATFORM),Linux) # Linux Wine SDK=/home/david/.wine/drive_c/65xx_FreeSDK WINE=wine - EMU=zsnes + EMU=../../tools/bsnes/bsnes EMU_DEBUG=/home/david/Devel/arch/snes/tools/zsnes_linux_debug151/src/zsnesd -d else # Mac Wine @@ -69,4 +69,4 @@ $(APP): $(OBJS) ucon64 -snes -chk $(APP) clean: - rm -vf $(APP) *.obj + rm -vf $(APP) *.obj *.TMP diff --git a/snes/fatfstest/debug.c b/snes/fatfstest/debug.c index 38f53f7..d6cddf6 100644 --- a/snes/fatfstest/debug.c +++ b/snes/fatfstest/debug.c @@ -7,9 +7,10 @@ #include "PPU.h" #include "ressource.h" + word debugMap[0x400]; static char debug_buffer[255]; -char hex_chars[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + void debug_init(void) { word i; @@ -19,6 +20,7 @@ void debug_init(void) { memset(debug_buffer,0,255); } + void debug_enable(void){ VRAMLoad((word) debugFont_pic, 0x5000, 2048); CGRAMLoad((word) debugFont_pal, (byte) 0x00, (word) 16); @@ -29,28 +31,17 @@ void debug_enable(void){ } -void int2hex(unsigned long number, char *buf,word size) -{ - unsigned long n; - unsigned char i; - //unsigned char x; - for (i = 0; i < size; i++) { - n = number >> 4; - //x = (number - (n << 4)); - buf[size-i-1] = hex_chars[(number - (n << 4))]; - number = n; - } -} - - - -void print_screen(char *buffer,word y){ +void _print_screen(word y, char *buffer){ char i; char l; l = strlen(buffer); waitForVBlank(); for(i=0; i<32; i++) { + if (buffer[i] == '\n' ) { + y++; + continue; + } if (i> 24) & 0xff; *(byte*) MMIO_SECTOR02 = (sector >> 16) & 0xff; *(byte*) MMIO_SECTOR03 = (sector >> 8) & 0xff; - *(byte*) MMIO_SECTOR04 = (sector >> 8) & 0xff; + *(byte*) MMIO_SECTOR04 = (sector) & 0xff; *(byte*) MMIO_COUNT = count; while(*(byte*) MMIO_RETVAL == STA_VOID); retval = *(byte*) MMIO_RETVAL; - print_console("copy buffer\n"); + printfc("copy buffer\n"); for (i=0;i<(count*512);i++) *(byte*)(SHARED_ADDR+i) = buff[i]; diff --git a/snes/fatfstest/integer.h b/snes/fatfstest/integer.h index 011bb4d..e8f435d 100644 --- a/snes/fatfstest/integer.h +++ b/snes/fatfstest/integer.h @@ -4,6 +4,10 @@ #ifndef _INTEGER +#if 0 +#include +#else + /* These types must be 16-bit, 32-bit or larger integer */ typedef int INT; typedef unsigned int UINT; @@ -25,8 +29,12 @@ typedef unsigned long ULONG; typedef unsigned long DWORD; /* Boolean type */ -typedef enum { FALSE = 0, TRUE } BOOL; +typedef enum { + FALSE = 0, + TRUE = 1 +} BOOL; +#endif #define _INTEGER #endif diff --git a/snes/fatfstest/main.c b/snes/fatfstest/main.c index a49025b..ed0031f 100644 --- a/snes/fatfstest/main.c +++ b/snes/fatfstest/main.c @@ -1,3 +1,7 @@ +#include +#include +#include + #include "data.h"; #include "pad.h"; #include "event.h"; @@ -5,27 +9,29 @@ #include "ressource.h"; #include "PPU.h" #include "debug.h" +#include "integer.h" #include "ff.h" -#include -#include -#include - padStatus pad1; -WORD acc_size; /* Work register for fs command */ +DWORD acc_size; /* Work register for fs command */ WORD acc_files, acc_dirs; -FILINFO finfo; -FATFS fatfs[2]; /* File system object for each logical drive */ -BYTE buff[512]; /* Working buffer */ +FILINFO finfo; +FATFS fatfs[2]; /* File system object for each logical drive */ +BYTE Buff[512]; /* Working buffer */ + +DWORD p1, p2, p3; +BYTE res; +WORD w1; +UINT s1, s2, cnt; FATFS *fs; -DIR dir; /* Directory object */ -FIL file1, file2; /* File object */ -DWORD p1, p2, p3; +DIR dir; /* Directory object */ +FIL file1, file2; /* File object */ + void initInternalRegisters(void) { @@ -56,54 +62,49 @@ DWORD get_fattime () | ((DWORD)ptm->tm_sec >> 1); } - -static -FRESULT scan_files (char* path) -{ - DIR dirs; - FRESULT res; - int i; - - if ((res = f_opendir(&dirs, path)) == FR_OK) { - i = strlen(path); - //printf("Ok\n"); - while (((res = f_readdir(&dirs, &finfo)) == FR_OK) && finfo.fname[0]) { - if (finfo.fattrib & AM_DIR) { - acc_dirs++; - *(path+i) = '/'; strcpy(path+i+1, &finfo.fname[0]); - res = scan_files(path); - *(path+i) = '\0'; - if (res != FR_OK) break; - } else { - acc_files++; - acc_size += finfo.fsize; - } - } - } - print_console("scan_files ret\n"); - return res; -} - - -void put_rc (FRESULT rc) -{ - char *p; - static char str[] = - "OK\0" "NOT_READY\0" "NO_FILE\0" "FR_NO_PATH\0" "INVALID_NAME\0" "INVALID_DRIVE\0" - "DENIED\0" "EXIST\0" "RW_ERROR\0" "WRITE_PROTECTED\0" "NOT_ENABLED\0" - "NO_FILESYSTEM\0" "INVALID_OBJECT\0" "MKFS_ABORTED\0"; - FRESULT i; - - for (p = str, i = 0; i != rc && *p; i++) { - while(*p++); - } - print_console(p); -} - void halt(void) { while(1); } + +void put_rc (FRESULT rc){ + const char *p; + static const char str[] = + "OK\0" "NOT_READY\0" "NO_FILE\0" "FR_NO_PATH\0" "INVALID_NAME\0" "INVALID_DRIVE\0" + "DENIED\0" "EXIST\0" "RW_ERROR\0" "WRITE_PROTECTED\0" "NOT_ENABLED\0" + "NO_FILESYSTEM\0" "INVALID_OBJECT\0" "MKFS_ABORTED\0"; + FRESULT i; + + for (p = str, i = 0; i != rc && *p; i++) { + while(*p++); + } + printfc("rc=%u FR_%s\n", (WORD)rc, p); +} + + +FRESULT scan_files (char* path){ + DIR dirs; + FRESULT res; + int i; + + if ((res = f_opendir(&dirs, path)) == FR_OK) { + i = strlen(path); + while (((res = f_readdir(&dirs, &finfo)) == FR_OK) && finfo.fname[0]) { + if (finfo.fattrib & AM_DIR) { + acc_dirs++; + *(path+i) = '/'; strcpy(path+i+1, &finfo.fname[0]); + res = scan_files(path); + *(path+i) = '\0'; + if (res != FR_OK) break; + } else { + acc_files++; + acc_size += finfo.fsize; + } + } + } + return res; +} + void main(void) { word i,j; BYTE res; @@ -114,46 +115,32 @@ void main(void) { *(byte*) 0x2100 = 0x0f; // enable background debug_enable(); - print_screen("FATFS TEST",0); - print_console("mount "); + printfs(0,"FATFS "); - put_rc(f_mount(0, &fatfs[0])); + printfc("Try to init disk\n"); + put_rc(f_mount(0, &fatfs[p1])); - print_console("disk_initialize \n"); - disk_initialize(0); - print_console("disk_read \n"); - disk_read(0,buff,0xaabb,1); - print_console("disk_done \n"); + res = f_getfree("/", &p2, &fs); + if (res) + put_rc(res); + + printfs(0,"FAT type = %u\nBytes/Cluster = %lu\nNumber of FATs = %u\n" + "Root DIR entries = %u\nSectors/FAT = %lu\nNumber of clusters = %lu\n" + "FAT start (lba) = %lu\nDIR start (lba,clustor) = %lu\nData start (lba) = %lu\n", + (WORD)fs->fs_type, (DWORD)fs->csize * 512, (WORD)fs->n_fats, + fs->n_rootdir, (DWORD)fs->sects_fat, (DWORD)fs->max_clust - 2, + fs->fatbase, fs->dirbase, fs->database); - - halt(); - - res = f_getfree("/", &p2, &fs); - if (res) { - put_rc(res); - } - /* - printf("FAT type = %u\nBytes/Cluster = %lu\nNumber of FATs = %u\n" - "Root DIR entries = %u\nSectors/FAT = %lu\nNumber of clusters = %lu\n" - "FAT start (lba) = %lu\nDIR start (lba,clustor) = %lu\nData start (lba) = %lu\n", - (WORD)fs->fs_type, (DWORD)fs->csize * 512, (WORD)fs->n_fats, - fs->n_rootdir, (DWORD)fs->sects_fat, (DWORD)fs->max_clust - 2, - fs->fatbase, fs->dirbase, fs->database - ); - */ - acc_size = acc_files = acc_dirs = 0; - res = scan_files("/"); - if (res) { - put_rc(res); - } - /* - printf("%u files, %lu bytes.\n%u folders.\n" - "%lu KB total disk space.\n%lu KB available.\n", - acc_files, acc_size, acc_dirs, - (fs->max_clust - 2) * (fs->csize / 2), p2 * (fs->csize / 2) - ); - */ - + acc_size = acc_files = acc_dirs = 0; + res = scan_files("/"); + if (res) + put_rc(res); + + printfc("%u files, %lu bytes.\n%u folders.\n" + "%lu KB total disk space.\n%lu KB available.\n", + acc_files, acc_size, acc_dirs, + (fs->max_clust - 2) * (fs->csize / 2), p2 * (fs->csize / 2)); + while(1){ while(!pad1.start) { waitForVBlank();