diff --git a/src/main.c b/src/main.c index b7c4021..70927f3 100644 --- a/src/main.c +++ b/src/main.c @@ -212,7 +212,7 @@ int main(void) { set_avr_ena(1); _delay_ms(100); - uart_puts_P(PSTR("SNES GO!\n")); + uart_puts_P(PSTR("SNES GO!\r\n")); snes_reset(0); uint8_t cmd = 0; @@ -227,14 +227,19 @@ int main(void) { _delay_ms(100); // snes_reset(1); set_avr_ena(0); -// dprintf("Selected name: %s\n", file_lfn); + dprintf("Selected name: %s\n", file_lfn); load_rom(file_lfn); + strcpy(strrchr((char*)file_lfn, (int)'.'), ".srm"); + dprintf("SRM file: %s\n", file_lfn); + load_sram(file_lfn, SRAM_SAVE_ADDR); set_avr_ena(1); snes_reset(1); _delay_ms(100); snes_reset(0); break; default: + dprintf("unknown cmd: %d\n", cmd); + cmd=0; // unknown cmd: stay in loop break; } diff --git a/src/memory.h b/src/memory.h index ead9221..3907b11 100644 --- a/src/memory.h +++ b/src/memory.h @@ -4,7 +4,6 @@ #ifndef MEMORY_H #define MEMORY_H -#define SRAM_WORK_ADDR (0x100000L) #define SRAM_DB_ADDR (0x080000L) #define SRAM_DIR_ADDR (0x300000L) #define SRAM_CMD_ADDR (0x601004L) diff --git a/src/smc.c b/src/smc.c index 0a5fa64..01d2315 100644 --- a/src/smc.c +++ b/src/smc.c @@ -53,7 +53,7 @@ uint8_t checkChksum(uint16_t cchk, uint16_t chk) { } void smc_id(snes_romprops_t* props) { - uint8_t score, maxscore=1, score_idx=0; + uint8_t score, maxscore=1, score_idx=2; // assume LoROM snes_header_t* header = &(props->header); @@ -64,9 +64,9 @@ void smc_id(snes_romprops_t* props) { // _delay_ms(30); score = 0; } else { - score = smc_headerscore(header); + score = smc_headerscore(header)/(1+(num&1)); } -// dprintf("%d: offset = %lX; score = %d\n", num, hdr_addr[num], score); + dprintf("%d: offset = %lX; score = %d\n", num, hdr_addr[num], score); // _delay_ms(100); if(score>=maxscore) { score_idx=num; @@ -81,7 +81,7 @@ void smc_id(snes_romprops_t* props) { } // restore the chosen one -// dprintf("winner is %d\n", score_idx); + dprintf("winner is %d\n", score_idx); // _delay_ms(30); file_readblock(header, hdr_addr[score_idx], sizeof(snes_header_t)); switch(header->map & 0xef) { @@ -94,10 +94,27 @@ void smc_id(snes_romprops_t* props) { case 0x25: props->mapper_id = 2; break; - default: - props->mapper_id = 0; // whatever + default: // invalid/unsupported mapper, use header location + switch(score_idx) { + case 0: + case 1: + props->mapper_id = 0; + break; + case 2: + case 3: + props->mapper_id = 1; + break; + case 4: + case 5: + props->mapper_id = 2; + break; + default: + props->mapper_id = 1; // whatever + } + } + if(header->romsize == 0 || header->romsize > 13) { + header->romsize = 13; } - props->ramsize_bytes = (uint32_t)1024 << header->ramsize; props->romsize_bytes = (uint32_t)1024 << header->romsize; props->expramsize_bytes = (uint32_t)1024 << header->expramsize; diff --git a/src/snes.c b/src/snes.c index b6ffe00..3042090 100644 --- a/src/snes.c +++ b/src/snes.c @@ -79,7 +79,7 @@ void snes_main_loop() { uart_puthexshort(saveram_crc); uart_putcrlf(); set_busy_led(1); - save_sram((uint8_t*)"/test.srm", saveram_size, saveram_base_addr); + save_sram(file_lfn, saveram_size, saveram_base_addr); set_busy_led(0); } saveram_crc_old = saveram_crc;