diff --git a/snes/fatfstest/StartupSnes.asm b/snes/fatfstest/StartupSnes.asm index 13844b7..d6f7ceb 100644 --- a/snes/fatfstest/StartupSnes.asm +++ b/snes/fatfstest/StartupSnes.asm @@ -187,9 +187,9 @@ DATA XDEF ~~heap_end ~~heap_start: - WORD $1000 + WORD $1e00 ~~heap_end: - WORD $1200 + WORD $2000 ;****************************************************************************** ;*** SNES ROM Registartion Data *** diff --git a/snes/fatfstest/config.h b/snes/fatfstest/config.h index 60ed27a..8f7b51d 100644 --- a/snes/fatfstest/config.h +++ b/snes/fatfstest/config.h @@ -17,7 +17,7 @@ #define SHARED_SIZE 32768 -#define SHARED_ADDR 0x3d0000 - +#define SHARED_ADDR 0x3d8000 +//#define SHARED_ADDR 0x001d00 #undef MMIO_DEBUG diff --git a/snes/fatfstest/debug.c b/snes/fatfstest/debug.c index 3db39b2..5674a6b 100644 --- a/snes/fatfstest/debug.c +++ b/snes/fatfstest/debug.c @@ -12,25 +12,34 @@ -word debugMap[0x400]; -static char debug_buffer[512]; -static char screen_buffer[512]; +#define DEBUG_BUFFER_SIZE 256 + +word debug_map[0x400]; +char debug_buffer[DEBUG_BUFFER_SIZE]; +//char screen_buffer[DEBUG_BUFFER_SIZE]; + void debug_init(void) { - word i; - for (i = 0; i < 0x400; i++) { - debugMap[i] = 0x00; - } - memset(debug_buffer, 0, 255); + + memset(debug_map, 0, 0x800); + memset(debug_buffer, 0,DEBUG_BUFFER_SIZE); + +#if 0 + memset(screen_buffer, 0, DEBUG_BUFFER_SIZE); + printfc("screen_buffer=%p\n",screen_buffer); + printfc("debug_buffer=%p\n",debug_buffer); + printfc("debug_map=%p\n",debug_map); +#endif + } void debug_enable(void) { VRAMLoad((word) debugFont_pic, 0x5000, 2048); - VRAMLoad((word) debugMap, 0x4000, 0x0800); + VRAMLoad((word) debug_map, 0x4000, 0x0800); setTileMapLocation(0x4000, (byte) 0x00, (byte) 0); setCharacterLocation(0x5000, (byte) 0); *(byte *) 0x2100 = 0x0f; // enable background @@ -73,10 +82,12 @@ void _print_char(word y, word x, char c) VRAMByteWrite((byte) (c - 32), (word) (0x4000 + x + (y * 0x20))); } + void _print_screen(word y, char *buffer) { char l; - char x = 0; + unsigned int x; + x = y * 0x20; l = strlen(buffer); waitForVBlank(); while (*buffer) { @@ -86,14 +97,14 @@ void _print_screen(word y, char *buffer) *(word *) 0x2116 = 0x4000 + x + (y * 0x20); *(byte *) 0x2118 = 0; } - x = 0; - y++; + y ++; + x = y * 0x20; buffer++; waitForVBlank(); continue; } *(byte *) 0x2115 = 0x80; - *(word *) 0x2116 = 0x4000 + x + (y * 0x20); + *(word *) 0x2116 = 0x4000 + x; *(byte *) 0x2118 = *buffer - 32; x++; buffer++; @@ -102,6 +113,7 @@ void _print_screen(word y, char *buffer) #endif } } + void _print_console(const char *buffer) { while (*buffer) @@ -118,7 +130,7 @@ void printfc(const char *fmt, ...) vsprintf(debug_buffer, fmt, ap); va_end(ap); _print_console(debug_buffer); - // memset(debug_buffer,0,255); + //memset(debug_buffer, 0, DEBUG_BUFFER_SIZE); } @@ -126,10 +138,11 @@ void printfs(word y, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - vsprintf(screen_buffer, fmt, ap); + vsprintf(debug_buffer, fmt, ap); va_end(ap); - _print_screen(y, screen_buffer); - memset(screen_buffer, 0, 255); + _print_screen(y, debug_buffer); + //memset(debug_buffer, 0, DEBUG_BUFFER_SIZE); + //memset(screen_buffer, 0, DEBUG_BUFFER_SIZE); } void printc_packet(unsigned long addr, unsigned int len, byte * packet) diff --git a/snes/fatfstest/ff.h b/snes/fatfstest/ff.h index 0c52e8d..1dfb05d 100644 --- a/snes/fatfstest/ff.h +++ b/snes/fatfstest/ff.h @@ -25,7 +25,7 @@ #ifndef _FATFS #define _FATFS -#define _WORD_ACCESS 0 +#define _WORD_ACCESS 1 /* * The _WORD_ACCESS option defines which access method is used to the word / data in the FAT structure. / / 0: Byte-by-byte access. Always * compatible with all platforms. / 1: Word access. Do not choose this unless following condition is met. / / When the byte order on the diff --git a/snes/fatfstest/main.c b/snes/fatfstest/main.c index beb8da1..9a1dc78 100644 --- a/snes/fatfstest/main.c +++ b/snes/fatfstest/main.c @@ -23,21 +23,25 @@ typedef void (*FUNC) (void); padStatus pad1; -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 */ -DWORD p1, p2, p3; -DWORD addr; -DWORD crc_addr; -UINT crc; -BYTE res, bank; -WORD w1; -UINT s1, s2, cnt; +FATFS fatfs[1]; /* File system object for each logical * drive */ FATFS *fs; DIR dir; /* Directory object */ -FIL file1, file2; +FIL file1; +char buffer[512]; +char *ptr; +DWORD acc_size; /* Work register for fs command */ +WORD acc_files, acc_dirs; + +DWORD p1, p2; +UINT s1, s2, cnt,crc,bank; +DWORD addr,crc_addr; +BYTE res; + + +char rom_name[]= ROM_NAME; + void initInternalRegisters(void) { characterLocation[0] = 0x0000; @@ -83,7 +87,7 @@ void put_rc(FRESULT rc) for (p = str, i = 0; i != rc && *p; i++) { while (*p++); } - printfc("rc=%u FR_%s\n", (WORD) rc, p); + printfc("rc=%i FR_%s\n", (WORD) rc, p); } FRESULT scan_files(char *path) @@ -128,7 +132,7 @@ void boot(DWORD addr) { FUNC fn; printfc("SNES::boot addr=%lx\n", addr); - fn = (FUNC) addr; + fn = (FUNC)addr; fn(); } void main(void) @@ -145,11 +149,14 @@ void boot(DWORD addr) printfc("SNES::main: Try to init disk\n"); put_rc(f_mount((BYTE) 0, &fatfs[0])); +#if 0 printfs(0, "FATFS OPTIXX.ORG "); printfc("SNES::main: Try to get free\n"); + res = f_getfree("", &p2, &fs); if (res) put_rc(res); + printfc("SNES::main: printf fs results\n"); printfs(1, "FAT TYPE = %u\nBYTES/CLUSTER = %lu\nNUMBER OF FATS = %u\n" @@ -159,6 +166,7 @@ void boot(DWORD addr) (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; + printfc("SNES::main: scan files\n"); res = scan_files(""); if (res) @@ -170,10 +178,14 @@ void boot(DWORD addr) res = f_opendir(&dir, ""); if (res) put_rc(res); + p1 = s1 = s2 = 0; cnt = 0; wait(); clears(); +#endif + + #if 0 printfc("SNES::main: read dir\n"); for (;;) { @@ -214,55 +226,63 @@ void boot(DWORD addr) wait(); clears(); -#endif /* */ +#endif - printfc("SNES::main: open %s \n", ROM_NAME); - printfs(0, "OPEN %s", ROM_NAME); - put_rc(f_open(&file1, ROM_NAME, (BYTE) FA_READ)); p1 = BANK_SIZE * BANK_COUNT; p2 = 0; - p3 = 0; cnt = 0; bank = 0; addr = BASE_ADDR; crc_addr = BASE_ADDR; + + printfc("SNES::main: open %s \n", rom_name); + printfs(0, "OPEN %s", rom_name); + put_rc(f_open(&file1, rom_name, (BYTE) FA_READ)); + while (p1) { cnt = BLOCK_SIZE; p1 -= BLOCK_SIZE; - res = f_read(&file1, (byte *) (addr), cnt, &s2); - + + res = f_read(&file1, buffer, cnt, &s2); if (res != FR_OK) { printfc("SNES::main: read failed\n"); put_rc(res); break; } + p2 += s2; if (cnt != s2) { printfc("SNES::main: read cnt=%i s2=%i\n", cnt, s2); break; } + + for (i=0;i