Browse Source

get sram restore working and make the switch to quickdev loader more
mature

David Voswinkel 15 years ago
parent
commit
dbff180a91
4 changed files with 24 additions and 24 deletions
  1. 8 21
      avr/usbload/main.c
  2. 10 0
      avr/usbload/shared_memory.c
  3. 5 2
      avr/usbload/shared_memory.h
  4. 1 1
      avr/usbload/sram.c

+ 8 - 21
avr/usbload/main.c

@@ -145,8 +145,8 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
 
         req_percent = (uint32_t)( 100 * req_addr )  / req_addr_end;
         if (req_percent!=req_percent_last){
-            debug(DEBUG_USB,
-                "USB_BULK_UPLOAD_ADDR: precent=%i\n",  req_percent);
+            //debug(DEBUG_USB,
+            //    "USB_BULK_UPLOAD_ADDR: precent=%i\n",  req_percent);
             shared_memory_write(SHARED_MEM_TX_CMD_UPLOAD_PROGESS, req_percent);
             sram_bulk_write_start(req_addr);
         }
@@ -283,20 +283,15 @@ void usb_connect()
 void boot_startup_rom()
 {
 
-
     info("Activate AVR bus\n");
     avr_bus_active();
-
     info("IRQ off\n");
     snes_irq_lo();
     snes_irq_off();
-
     snes_lorom();
     info("Set Snes lowrom \n");
-
     rle_decode(&_rom, ROM_BUFFER_SIZE, 0x000000);
     dump_memory(0x10000 - 0x100, 0x10000);
-
     snes_reset_hi();
     snes_reset_off();
     snes_irq_lo();
@@ -307,20 +302,9 @@ void boot_startup_rom()
     info("Disable snes WR\n");
     snes_bus_active();
     info("Activate Snes bus\n");
-    _delay_ms(100);
-    info("Reset Snes\n");
+    _delay_ms(20);
     send_reset();
-    _delay_ms(100);
-#if 0
-    uint8_t i = 0;
-    i = 20;
-    info("Wait");
-    while (--i) {
-        _delay_ms(500);
-        info(".");
-    }
-    info("\n");
-#endif
+    _delay_ms(200);
 }
 
 
@@ -343,10 +327,12 @@ int main(void)
     info("Boot startup rom\n");
     boot_startup_rom();
 
+
     usbInit();
     usb_connect();
 
     while (1) {
+        
         avr_bus_active();
         info("Activate AVR bus\n");
         info("IRQ off\n");
@@ -369,7 +355,6 @@ int main(void)
         snes_bus_active();
         info("Activate Snes bus\n");
         _delay_ms(100);
-        info("Reset Snes\n");
         send_reset();
 
         info("Poll\n");
@@ -411,6 +396,8 @@ int main(void)
             info("Read 0x3000=%c\n", c);
 #endif
         }
+        info("Boot startup rom\n");
+        boot_startup_rom();
     }
 
     return 0;

+ 10 - 0
avr/usbload/shared_memory.c

@@ -73,6 +73,7 @@ void shared_memory_write(uint8_t cmd, uint8_t value)
     debug(DEBUG_SHM,"shared_memory_write:  0x%04x=0x%02x 0x%04x=0x%02x \n",
          SHARED_MEM_TX_LOC_CMD, cmd, SHARED_MEM_TX_LOC_PAYLOAD, value);
 
+    sram_bulk_addr_save();
     shared_memory_scratchpad_tx_save();
     shared_memory_irq_hook();
 
@@ -81,6 +82,7 @@ void shared_memory_write(uint8_t cmd, uint8_t value)
     sram_write(SHARED_MEM_TX_LOC_PAYLOAD, value);
 
     snes_hirom();
+    snes_wr_disable();
     snes_bus_active();
 
 #if SHARED_MEM_SWITCH_IRQ    
@@ -94,10 +96,14 @@ void shared_memory_write(uint8_t cmd, uint8_t value)
 #endif
 
     avr_bus_active();
+    snes_irq_lo();
+    snes_irq_off();
     snes_lorom();
+    snes_wr_disable();
 
     shared_memory_scratchpad_tx_restore();
     shared_memory_irq_restore();
+    //sram_bulk_addr_restore();
 
 }
 
@@ -124,6 +130,7 @@ int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer)
     if (state != SHARED_MEM_RX_AVR_ACK){
         return 1;
     }
+    sram_bulk_addr_save();
 
     *cmd = sram_read(SHARED_MEM_RX_LOC_CMD);
     *len = sram_read(SHARED_MEM_RX_LOC_LEN);
@@ -134,6 +141,7 @@ int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer)
     sram_write(SHARED_MEM_RX_LOC_STATE, SHARED_MEM_RX_AVR_RTS);
 
     snes_hirom();
+    snes_wr_disable();
     snes_bus_active();
 
 #if SHARED_MEM_SWITCH_IRQ    
@@ -148,5 +156,7 @@ int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer)
 
     avr_bus_active();
     snes_lorom();
+    snes_wr_disable();
+    sram_bulk_addr_restore();
     return 0;
 }

+ 5 - 2
avr/usbload/shared_memory.h

@@ -54,8 +54,11 @@
 #define SHARED_IRQ_LOC_LO                   0x00fffe
 #define SHARED_IRQ_LOC_HI                   0x00ffff
 
-#define SHARED_IRQ_HANDLER_LO               0x00
-#define SHARED_IRQ_HANDLER_HI               0x10
+/* Use COP IRQ LOC for hooked IRQ handler */
+#define SHARED_IRQ_HANDLER_LO               0x0ffe4
+#define SHARED_IRQ_HANDLER_HI               0x0ffe5
+
+
 
 void shared_memory_write(uint8_t cmd, uint8_t value);
 int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer);

+ 1 - 1
avr/usbload/sram.c

@@ -124,7 +124,7 @@ inline void sram_bulk_addr_save()
 
 inline void sram_bulk_addr_restore()
 {
-    sram_bulk_read_start(addr_stash);
+    sreg_set(addr_stash);
 }