Pārlūkot izejas kodu

get shared mem working

David Voswinkel 15 gadi atpakaļ
vecāks
revīzija
d1447db7b0
5 mainītis faili ar 1176 papildinājumiem un 1186 dzēšanām
  1. 1155 1166
      avr/usbload/loader.c
  2. 1 1
      avr/usbload/loader.h
  3. 13 7
      avr/usbload/main.c
  4. 5 10
      avr/usbload/shared_memory.c
  5. 2 2
      avr/usbload/shared_memory.h

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1155 - 1166
avr/usbload/loader.c


+ 1 - 1
avr/usbload/loader.h

@@ -2,6 +2,6 @@
 #ifndef __FIFO_H__
 #define __FIFO_H__
 
-#define ROM_SIZE 30151
+#define ROM_SIZE 30119
 
 #endif

+ 13 - 7
avr/usbload/main.c

@@ -124,7 +124,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
                    req_bank, req_addr);
 
             req_bank++;
-            shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank);
+            //shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank);
         }
         ret_len = USB_MAX_TRANS;
 /*
@@ -167,7 +167,6 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
         req_addr = rq->wValue.word;
         req_addr = req_addr << 16;
         req_addr = req_addr | rq->wIndex.word;
-        sram_bulk_write_start(req_addr);
         rx_remaining = rq->wLength.word;
             
         if (req_addr && req_addr % req_bank_size == 0) {
@@ -179,8 +178,12 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
                   req_bank, req_addr,timer_stop_int());
             #endif
             req_bank++;
+            shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank);
+            sram_bulk_write_start(req_addr);
             timer_start();
             
+        } else {
+            sram_bulk_write_start(req_addr);
         }
         ret_len = USB_MAX_TRANS;
   
@@ -204,15 +207,16 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
 #endif
         if (req_addr && ( req_addr % req_bank_size) == 0) {
             #ifdef FLT_DEBUG
-                debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx time=%.4f\n",
+                debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr=0x%08lx time=%.4f\n",
                    req_bank, req_addr,timer_stop());
             #else
-               debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx time=%i\n",
+               debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr=0x%08lx time=%i\n",
                   req_bank, req_addr,timer_stop_int());
             #endif
             req_bank++;
-            shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank);
             timer_start();
+            shared_memory_put(SHARED_MEM_CMD_UPLOAD_PROGESS,req_bank);
+            sram_bulk_write_start(req_addr);
             
         }
         ret_len = USB_MAX_TRANS;
@@ -489,7 +493,8 @@ void boot_startup_rom(){
     _delay_ms(100);
     info("Reset Snes\n");
     send_reset();
-#if 0 
+    _delay_ms(100);
+#if 0
     i = 20;
     info("Wait");
     while (--i){               
@@ -559,9 +564,10 @@ int main(void)
         while (req_state != REQ_STATUS_AVR){
             
             usbPoll();
+
 #ifdef DO_IRQ          
             i = 10;
-            while (--i) {               /* fake USB disconnect for > 250 ms */
+            while (--i) {
                 _delay_ms(100);
             }
             info("Send IRQ %i\n",++irq_count);

+ 5 - 10
avr/usbload/shared_memory.c

@@ -64,7 +64,8 @@ void shared_memory_irq_restore(){
 
 void shared_memory_put(uint8_t cmd, uint8_t value){
     
-    info("Write shared memory %06lx=%02x %06lx=%02x \n",SHARED_MEM_LOC_CMD,cmd,SHARED_MEM_LOC_PAYLOAD,value);
+    //return;
+    info("Write shared memory 0x%04x=0x%02x 0x%04x=0x%02x \n",SHARED_MEM_LOC_CMD,cmd,SHARED_MEM_LOC_PAYLOAD,value);
 
     shared_memory_scratchpad_save();
     shared_memory_irq_hook();
@@ -73,23 +74,17 @@ void shared_memory_put(uint8_t cmd, uint8_t value){
     sram_write(SHARED_MEM_LOC_CMD,cmd);
     sram_write(SHARED_MEM_LOC_PAYLOAD,value);
     
-    snes_irq_lo();
-    snes_irq_off();
     snes_hirom();
     snes_wr_disable(); 
     snes_bus_active();
-
-    //snes_irq_on();
-    //snes_irq_lo();
-    //_delay_us(20);
+    _delay_ms(50);
     
-    //snes_irq_hi();
-    //snes_irq_off();
     
     avr_bus_active();
-    snes_irq_off();
     snes_irq_lo();
+    snes_irq_off();
     snes_lorom();
+    snes_wr_disable(); 
     
     shared_memory_scratchpad_restore();
     shared_memory_irq_restore();

+ 2 - 2
avr/usbload/shared_memory.h

@@ -34,8 +34,8 @@
 #define SHARED_IRQ_LOC_HI              0x00ffff
 
 
-#define SHARED_IRQ_HANDLER_LO           0x12
-#define SHARED_IRQ_HANDLER_HI           0x34
+#define SHARED_IRQ_HANDLER_LO           0x00
+#define SHARED_IRQ_HANDLER_HI           0x10
 
 void shared_memory_put(uint8_t cmd, uint8_t value);
 

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels