mapper tweaks, srm file name

This commit is contained in:
ikari 2009-11-16 01:33:27 +01:00
parent 0b46b04dd9
commit 6d6fe8cfb7
4 changed files with 32 additions and 11 deletions

View File

@ -212,7 +212,7 @@ int main(void) {
set_avr_ena(1); set_avr_ena(1);
_delay_ms(100); _delay_ms(100);
uart_puts_P(PSTR("SNES GO!\n")); uart_puts_P(PSTR("SNES GO!\r\n"));
snes_reset(0); snes_reset(0);
uint8_t cmd = 0; uint8_t cmd = 0;
@ -227,14 +227,19 @@ int main(void) {
_delay_ms(100); _delay_ms(100);
// snes_reset(1); // snes_reset(1);
set_avr_ena(0); set_avr_ena(0);
// dprintf("Selected name: %s\n", file_lfn); dprintf("Selected name: %s\n", file_lfn);
load_rom(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); set_avr_ena(1);
snes_reset(1); snes_reset(1);
_delay_ms(100); _delay_ms(100);
snes_reset(0); snes_reset(0);
break; break;
default: default:
dprintf("unknown cmd: %d\n", cmd);
cmd=0; // unknown cmd: stay in loop
break; break;
} }

View File

@ -4,7 +4,6 @@
#ifndef MEMORY_H #ifndef MEMORY_H
#define MEMORY_H #define MEMORY_H
#define SRAM_WORK_ADDR (0x100000L)
#define SRAM_DB_ADDR (0x080000L) #define SRAM_DB_ADDR (0x080000L)
#define SRAM_DIR_ADDR (0x300000L) #define SRAM_DIR_ADDR (0x300000L)
#define SRAM_CMD_ADDR (0x601004L) #define SRAM_CMD_ADDR (0x601004L)

View File

@ -53,7 +53,7 @@ uint8_t checkChksum(uint16_t cchk, uint16_t chk) {
} }
void smc_id(snes_romprops_t* props) { 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); snes_header_t* header = &(props->header);
@ -64,9 +64,9 @@ void smc_id(snes_romprops_t* props) {
// _delay_ms(30); // _delay_ms(30);
score = 0; score = 0;
} else { } 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); // _delay_ms(100);
if(score>=maxscore) { if(score>=maxscore) {
score_idx=num; score_idx=num;
@ -81,7 +81,7 @@ void smc_id(snes_romprops_t* props) {
} }
// restore the chosen one // restore the chosen one
// dprintf("winner is %d\n", score_idx); dprintf("winner is %d\n", score_idx);
// _delay_ms(30); // _delay_ms(30);
file_readblock(header, hdr_addr[score_idx], sizeof(snes_header_t)); file_readblock(header, hdr_addr[score_idx], sizeof(snes_header_t));
switch(header->map & 0xef) { switch(header->map & 0xef) {
@ -94,10 +94,27 @@ void smc_id(snes_romprops_t* props) {
case 0x25: case 0x25:
props->mapper_id = 2; props->mapper_id = 2;
break; break;
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: default:
props->mapper_id = 0; // whatever props->mapper_id = 1; // whatever
}
}
if(header->romsize == 0 || header->romsize > 13) {
header->romsize = 13;
} }
props->ramsize_bytes = (uint32_t)1024 << header->ramsize; props->ramsize_bytes = (uint32_t)1024 << header->ramsize;
props->romsize_bytes = (uint32_t)1024 << header->romsize; props->romsize_bytes = (uint32_t)1024 << header->romsize;
props->expramsize_bytes = (uint32_t)1024 << header->expramsize; props->expramsize_bytes = (uint32_t)1024 << header->expramsize;

View File

@ -79,7 +79,7 @@ void snes_main_loop() {
uart_puthexshort(saveram_crc); uart_puthexshort(saveram_crc);
uart_putcrlf(); uart_putcrlf();
set_busy_led(1); 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); set_busy_led(0);
} }
saveram_crc_old = saveram_crc; saveram_crc_old = saveram_crc;