448i mode (select button), sram reliability checking

This commit is contained in:
ikari
2009-11-19 16:40:33 +01:00
parent 6d6fe8cfb7
commit 187595686e
8 changed files with 172 additions and 33 deletions

View File

@@ -245,11 +245,13 @@ int main(void) {
}
dprintf("cmd was %x, going to snes main loop\n", cmd);
led_std();
cmd=0;
while(1) {
if(get_snes_reset()) {
dprintf("RESET\n");
}
sram_reliable();
snes_main_loop();
}

View File

@@ -218,30 +218,30 @@ uint32_t load_sram(uint8_t* filename, uint32_t base_addr) {
void save_sram(uint8_t* filename, uint32_t sram_size, uint32_t base_addr) {
uint32_t count = 0;
uint32_t count = 0;
uint32_t num = 0;
spi_none();
file_open(filename, FA_CREATE_ALWAYS | FA_WRITE);
file_open(filename, FA_CREATE_ALWAYS | FA_WRITE);
if(file_res) {
uart_putc(0x30+file_res);
}
while(count<sram_size) {
while(count<sram_size) {
set_avr_addr(base_addr+count);
spi_fpga();
spiTransferByte(0x81); // read
spiTransferByte(0); // dummy
for(int j=0; j<sizeof(file_buf); j++) {
file_buf[j] = spiTransferByte(0x00);
count++;
}
for(int j=0; j<sizeof(file_buf); j++) {
file_buf[j] = spiTransferByte(0x00);
count++;
}
spi_none();
num = file_write();
num = file_write();
if(file_res) {
uart_putc(0x30+file_res);
}
}
file_close();
}
file_close();
}
@@ -269,13 +269,27 @@ uint32_t calc_sram_crc(uint32_t base_addr, uint32_t size) {
uint8_t sram_reliable() {
uint16_t score=0;
uint32_t val = sram_readlong(SRAM_SCRATCHPAD);
while(score<SRAM_RELIABILITY_SCORE) {
// uint32_t val = sram_readlong(SRAM_SCRATCHPAD);
uint8_t result = 0;
/* while(score<SRAM_RELIABILITY_SCORE) {
if(sram_readlong(SRAM_SCRATCHPAD)==val) {
score++;
} else {
set_pwr_led(0);
score=0;
}
}*/
for(uint16_t i = 0; i < SRAM_RELIABILITY_SCORE; i++) {
if(sram_readlong(SRAM_SCRATCHPAD)==0x12345678) {
score++;
}
}
return 1;
if(score<SRAM_RELIABILITY_SCORE) {
result = 0;
dprintf("score=%d\n", score);
} else {
result = 1;
}
set_pwr_led(result);
return result;
}

View File

@@ -56,13 +56,15 @@ uint8_t get_snes_reset() {
* monitors SRAM changes and other things
*/
uint32_t diffcount = 0, samecount = 0;
uint8_t sram_valid = 0;
void snes_main_loop() {
if(initloop) {
saveram_crc_old = calc_sram_crc(saveram_base_addr, saveram_size);
initloop=0;
}
saveram_crc = calc_sram_crc(saveram_base_addr, saveram_size);
if(crc_valid) {
sram_valid = sram_reliable();
if(crc_valid && sram_valid) {
if(saveram_crc != saveram_crc_old) {
if(samecount) {
diffcount=1;
@@ -84,7 +86,7 @@ void snes_main_loop() {
}
saveram_crc_old = saveram_crc;
}
dprintf("valid=%d diffcount=%ld samecount=%ld\n", crc_valid, diffcount, samecount);
dprintf("crc_valid=%d sram_valid=%d diffcount=%ld samecount=%ld\n", crc_valid, sram_valid, diffcount, samecount);
}
/*
@@ -96,6 +98,7 @@ uint8_t menu_main_loop() {
sram_writebyte(0, SRAM_CMD_ADDR);
while(!cmd) {
if(!get_snes_reset()) {
while(!sram_reliable());
cmd = sram_readbyte(SRAM_CMD_ADDR);
}
if(get_snes_reset()) {