From f1b89eee83fc0a166db925e465a75dd6d5135717 Mon Sep 17 00:00:00 2001 From: David Voswinkel Date: Sun, 5 Jul 2009 11:47:52 +0200 Subject: [PATCH] remove address setting and tweak upload speed --- avr/usbload/commandline/snesuploader | Bin 18620 -> 18620 bytes avr/usbload/commandline/snesuploader.c | 19 ++++++++-- avr/usbload/main.c | 48 +++++++++---------------- 3 files changed, 32 insertions(+), 35 deletions(-) diff --git a/avr/usbload/commandline/snesuploader b/avr/usbload/commandline/snesuploader index d2c6b90c091b9242a01fced0e970b2e82e6c4836..69c99dbe796c38906ed651460b6f839d1f984b67 100755 GIT binary patch delta 2001 zcmZ`)ZERCz6n<~lK{wX5rQOz#wcYxGpd08Gf{viu+=XZ|1ZRUE2+_p-n2DI^f*O`C zmc`vQb-;-PA)+P*Axwg7!qB2c=H^Fm&cwJFV+@~nHX$fPkl^Zb+P4aZE!}-jpXYhc zdCs}-y-jXal3SH61I3e-LbO_im@N75@HvAu`FY*Ys-;J#)u}b>HN(+AX`tY4!(=5j zDdmIL3w}1y^X8?21wkP$>jHm|W)5DOD@45e3a*)7b6C9l{NPFR7mBi<$kJ+fpqfru z4$RqIC4`>4&@OAg!COT&Hm{+eipFg|Tb)@5ttDiPM?#t-q(AGYS8Q#DsGmve(|J-2 zX~vL#p8mFVC}-(go8PwQW~$XkJLYasROYPb@?0+G2eicgoGnl)3#nC{Ymt`@+Z(J8 z=g~+Nmp`-3;Wrd|soK$R*iuY~981H!#n^`pVa#h(JuTu9Q^HummJ_i)$z7wlWw$xL z_Xx4P{h`jOL~OexKBLw$e{dg&bjg@8v=EcicS+e~BKD?~B|Ow$cIjS^8xx&{)Fopr zA=7M#u^JVuiP#}i&cWej&+%os69Sg4`(tNROJME zuZvbzJQ?W9Z;Bmrp;)%F5Td-S$VDeBJPSUO)jXgQ8`0^h{Js@Nu2uoOCuQkLlFjLi z?sr19!lbEt6S1j(g(ep61f{7XJ*m#xI233r5liPKH+a|xUEaf5j-fQj0bs$@NBI6c z4l1sWaOOui^BC)BuhVX*bJ8(qRY)lU3U*#DpXf&Gb6BY!M0$bqu3sm`Zt>)-0==V^ptC=1z)5^ z9(XqrBMF|_VZJGC^px9YQipgH)7R)VcXjPzc^k}}Ffyb?hOdlfqC#{QO{*v3kgCJl zAMJNUlI>a~MHB8aWiy?3SC_nAmOWSf>U1VU?|N$5kmvusY=(wifXPz4$}>?5>Qnxn zpl8@Yw(U zDKNPfUc&k`zRc`pBiMBP%tqEQ&##8>uKxFGs0S$T`b!9h;X%YkHa)R!{Z}Ut4$k)) zgXRXW5EFPJc_Gr08*&Y_+RSDVYv8JGT8IU(5vW&E*U}+zawW_jg@R%uZY17_qP`Q1K%Dmu>b%7 delta 1957 zcmZ`)eM}o=7=Q05qcHkKOH0c~OFv-QGMp|(WtvgOv4zNRfo3k~7L5a$!7*pE%#0L0 zyLg@_vNy{NhAbwV(F_R$#&9+U1!-I|l^M(u=SLj4L;M5X7H}-o=efRhCPLHP{qFaC z{hsH2-@8~B7wh8Q>CI{@BxJ-yNSk3`_&44>J#ahb_Lx^rM@PfEij#S|OzVD-o8^Hw+CT0kXhC%>3UUA8TO`Anz; z5lTKG6T)>OhxCfhfsz&RFJ^m|zG5r2m4iohQ(bsg5to^vl%BV_eHJjxWyf{?G8loH z#@wzdBA1oSecMGBY&Ut)N&m=od0qM>`-v0o$NYLl^dW;oTB9j((slO3{1GSZu{-$r zJUVQDIx>^NT*Lr`$(rQ1@(6*dIC%9C;wpdkkLlW7KWZmL5hjy;6tapUI4MV1Y6$(y^F}^7=Wf zs>f=OK_?3%s5g^3Tt)iOkajkf=wq(ptvzgUzkWl2nlB{3u7|4hDN0MrVT=@ zNo?)wXnM81k9367rEqL6Lt2=fqVKzkvv)u&46pMP>>z5%cLdf0@fnmR3cZZ^Lucm7 zv{e8-pbe#ncW7da!=QCV^PrxJ` zBOJ;V`bdS(SOxFp>x`*#(*qS=V>3{<7}e~i-9WW_2+2rG#!BxV@Lf^{ zm*aj|a%Mj6r|W}W!?^$-W@7{-2gF$@Jx zRPK$S)HqNka7B^dFpTnkVi-G|L#!i2w+ZIMcocMpVVs)*a$p`DSOLTM-Sq;7e>%95 RjT+`OyqP0|2e;Lx{{yN> 16) & 0x00ff; + if (addr == 0x000000){ - cnt = usb_control_msg(handle, + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, USB_BULK_UPLOAD_ADDR, addr_hi, addr_lo, (char *) read_buffer + step, SEND_BUFFER_SIZE, 5000); - + } else { + + cnt = usb_control_msg(handle, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_NEXT, addr_hi, + addr_lo, (char *) read_buffer + step, + SEND_BUFFER_SIZE, 5000); + + } if (cnt < 0) { fprintf(stderr, "USB error: %s\n", usb_strerror()); usb_close(handle); @@ -225,6 +233,11 @@ int main(int argc, char **argv) } } bank = 0; + cnt = usb_control_msg(handle, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_END, 0, 0, NULL, + 0, 5000); + fseek(fp, 0, SEEK_SET); while ((cnt = fread(read_buffer, READ_BUFFER_SIZE, 1, fp)) > 0) { diff --git a/avr/usbload/main.c b/avr/usbload/main.c index 7ac2f79..5ff65fc 100644 --- a/avr/usbload/main.c +++ b/avr/usbload/main.c @@ -133,7 +133,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) rx_remaining = rq->wLength.word; if (req_addr && req_addr % req_bank_size == 0) { - debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr= 0x%08lx time=%.4f\n", + debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx time=%.4f\n", req_bank, req_addr,timer_stop()); req_bank++; timer_start(); @@ -146,23 +146,19 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) */ } else if (rq->bRequest == USB_BULK_UPLOAD_NEXT) { - if (req_state != REQ_STATUS_BULK_UPLOAD){ - debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: ERROR state is not REQ_STATUS_BULK_UPLOAD\n"); - return 0; - } - if (rx_remaining) { - sync_errors++; - debug(DEBUG_USB, - "USB_BULK_UPLOAD_NEXT: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n", - req_addr, rx_remaining, rq->wLength.word, sync_errors); - ret_len = 0; - } + req_state = REQ_STATUS_BULK_UPLOAD; + 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; - ret_len = USB_MAX_TRANS; + if (req_addr && req_addr % req_bank_size == 0) { - debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx \n", - req_bank, req_addr); + debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx time=%.4f\n", + req_bank, req_addr,timer_stop()); req_bank++; + timer_start(); + } ret_len = USB_MAX_TRANS; /* @@ -192,7 +188,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) */ } else if (rq->bRequest == USB_SNES_BOOT) { req_state = REQ_STATUS_BOOT; - debug(DEBUG_USB,"USB_SNES_BOOT: "); + debug(DEBUG_USB,"USB_SNES_BOOT:\n"); ret_len = 0; /* * ------------------------------------------------------------------------- @@ -353,33 +349,21 @@ int main(void) dump_memory(0x7f00,0x8000); - printf("IRQ off\n"); snes_irq_lo(); snes_irq_off(); + printf("IRQ off\n"); - printf("Set Snes lowrom\n"); snes_lorom(); + printf("Set Snes lowrom\n"); - printf("Disable snes WR\n"); snes_wr_disable(); + printf("Disable snes WR\n"); snes_bus_active(); printf("Activate Snes bus\n"); -#if 0 - i = 50; - while (--i) { /* fake USB disconnect for > 250 ms */ - _delay_ms(100); - printf("."); - } - printf("\n"); - avr_bus_active(); - printf("Activate AVR bus\n"); - crc_check_bulk_memory(0x000000, 0x80000); -#endif - while(1); - + return 0; }