소스 검색

Firmware: refactor SNES reset pulse

Maximilian Rehkopf 12 년 전
부모
커밋
023901cab2
5개의 변경된 파일16개의 추가작업 그리고 12개의 파일을 삭제
  1. 1 3
      src/cli.c
  2. 4 5
      src/main.c
  3. 1 3
      src/memory.c
  4. 7 1
      src/snes.c
  5. 3 0
      src/snes.h

+ 1 - 3
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) {

+ 4 - 5
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:

+ 1 - 3
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);
   }
 

+ 7 - 1
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.
  *

+ 3 - 0
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);