448i mode (select button), sram reliability checking
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
40
src/memory.c
40
src/memory.c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user