From 023901cab2c39fee5063aba27767d983b54609fb Mon Sep 17 00:00:00 2001 From: Maximilian Rehkopf Date: Sun, 1 Jul 2012 03:08:36 +0200 Subject: [PATCH] Firmware: refactor SNES reset pulse --- src/cli.c | 4 +--- src/main.c | 9 ++++----- src/memory.c | 4 +--- src/snes.c | 8 +++++++- src/snes.h | 3 +++ 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cli.c b/src/cli.c index 26daa5d..d5d6852 100644 --- a/src/cli.c +++ b/src/cli.c @@ -367,9 +367,7 @@ void cmd_sreset(void) { resetstate = parse_unsigned(0,1,10); snes_reset(resetstate); } else { - snes_reset(1); - delay_ms(20); - snes_reset(0); + snes_reset_pulse(); } } void cmd_settime(void) { diff --git a/src/main.c b/src/main.c index 32d1e57..db3ed31 100644 --- a/src/main.c +++ b/src/main.c @@ -223,13 +223,14 @@ printf("PCONP=%lx\n", LPC_SC->PCONP); sram_memset(SRAM_SYSINFO_ADDR, 13*40, 0x20); printf("SNES GO!\n"); snes_reset(1); - delay_ms(1); + fpga_reset_srtc_state(); + delay_ms(SNES_RESET_PULSELEN_MS); + sram_writebyte(32, SRAM_CMD_ADDR); snes_reset(0); uint8_t cmd = 0; uint64_t btime = 0; uint32_t filesize=0; - sram_writebyte(32, SRAM_CMD_ADDR); printf("test sram\n"); while(!sram_reliable()) cli_entrycheck(); printf("ok\n"); @@ -275,9 +276,7 @@ printf("PCONP=%lx\n", LPC_SC->PCONP); case SNES_CMD_RESET: /* process RESET request from SNES */ printf("RESET requested by SNES\n"); - snes_reset(1); - sleep_ms(10); - snes_reset(0); + snes_reset_pulse(); cmd=0; /* stay in menu loop */ break; case SNES_CMD_LOADLAST: diff --git a/src/memory.c b/src/memory.c index a112f7d..e0e3b6f 100644 --- a/src/memory.c +++ b/src/memory.c @@ -290,9 +290,7 @@ uint32_t load_rom(uint8_t* filename, uint32_t base_addr, uint8_t flags) { if(flags & LOADROM_WITH_RESET) { fpga_dspx_reset(1); - snes_reset(1); - delay_ms(10); - snes_reset(0); + snes_reset_pulse(); fpga_dspx_reset(0); } diff --git a/src/snes.c b/src/snes.c index 67e5f6b..a2257ce 100644 --- a/src/snes.c +++ b/src/snes.c @@ -48,7 +48,7 @@ volatile int reset_pressed; void prepare_reset() { snes_reset(1); - delay_ms(1); + delay_ms(SNES_RESET_PULSELEN_MS); if(romprops.ramsize_bytes && fpga_test() == FPGA_TEST_TOKEN) { writeled(1); save_sram(file_lfn, romprops.ramsize_bytes, SRAM_SAVE_ADDR); @@ -71,6 +71,12 @@ void snes_init() { snes_reset(1); } +void snes_reset_pulse() { + snes_reset(1); + delay_ms(SNES_RESET_PULSELEN_MS); + snes_reset(0); +} + /* * sets the SNES reset state. * diff --git a/src/snes.h b/src/snes.h index 4c04289..61725b7 100644 --- a/src/snes.h +++ b/src/snes.h @@ -38,10 +38,13 @@ #define MENU_ERR_NODSP (1) #define MENU_ERR_NOBSX (2) +#define SNES_RESET_PULSELEN_MS (1) + uint8_t crc_valid; void prepare_reset(void); void snes_init(void); +void snes_reset_pulse(void); void snes_reset(int state); uint8_t get_snes_reset(void); void snes_main_loop(void);