From 7ef03b498fe5883de5e81f7f9a345105bf88bd3f Mon Sep 17 00:00:00 2001 From: David Voswinkel Date: Tue, 30 Jun 2009 23:40:18 +0200 Subject: [PATCH] enable bulk sram transfers --- avr/usbload/commandline/snesuploader | Bin 18596 -> 18596 bytes avr/usbload/commandline/snesuploader.c | 6 ++---- avr/usbload/main.c | 25 ++++++++++++++----------- avr/usbload/usb_bulk.c | 3 ++- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/avr/usbload/commandline/snesuploader b/avr/usbload/commandline/snesuploader index 3eeec65e710fc1348390fce3a3b51e0fd9f517d2..3281c6be019dff53841446d3b164fbcbeb78d2bd 100755 GIT binary patch delta 1510 zcmZ`(ZERCz6h7~E$I8ZCJJ#=(4%*u-#890?qfC-+vo3&w7@9z$FqVu26DEEvxL{c0 zwI)reu$`dM1bzr4{-`=w!bY-WO%N6(%AcW-m_-5g&Q2jpvds+ZIqiFwX=c;j`}8@_ zIp=xLd*6GeU!3U|$Fo%s0N7*&fSPj`elD|Z8+-fHBX_3v9lkrz>6zOyiP`ce${>I( z!g+eWysH0s1?Sb~pa=roHz*5s76z}@0;Chy=vw%p#HABsL%V7&3vmSNZO;im9IjgF_n?<}V*lFxbpuEcIbI&R4*F1DS~-<7ei@sy*{ewGx^?Az8emC*-e zU;uAA>VtyuNn|SaMKag3F5PY+Pvq_wQ?jUeoOEXM4J8Z- zGP1pxKS&|4(cf0|dc0*#F3kBF@I{Yh?=o^bPAiSlJsrElEo(VFHcA9d{}LNa_0pmY zKbI;Rm|w!cN6v);R|!(X0)31(@Umx1AL;+wrHe$#T<->>kHG(zec)Iq8(CELyCOX( z?vZy(f~psHD>lOZZ&NHY%%px`Br$WPV8vtJ$Cs-XQc?IMe&c0a@CehfK~DPv5BjogORd~z2bh{Id7#~ia{+#K7VXY# z9Z9Z}B%^oZ9)C!@hPr=m^`dHc*Y5}{mAal%^L6P;V`3<{sw$**(qa9o41k}rPJA*N zQYYxhe=nH{+)vC5F~3P>20tW5T|>>wOIa#@8Ey9@_0604QH{{W83yQhjJt^GBIZ5GbYY5^^TfO_ne%v&m^ot3N@fnHT0-HM8UeDBVay#h`b}4q@Kz$G zv8naprYNn;N09(AI|%c^ts%_ojY`Zb-7fJQ_P6foW1r*1SV_qauSv|_CMD+8zGqFN3ty|Oy;JTX+c{nQ<$(H>Z*<{ zH25ekhNrCu3Pl)fPEjbeTAY*hk3e0^2GXhsGB*)_bT0&FaV;GZjOQdbvqBBYyWjiH zIp6v2xi9bhusA;~hQ`XX4FG$q0kW1)E-V zU|7_>mn|uOr)sOe)DN(v1AU&%P0ZB*B;()GHTP42OU9=spRT$r#OoNa?iEe=qV?m7 z{zd@3aKW~kx5W}(s_}_y*kfz7c2)u;b}7bWR7uzsy$j8@$Hjqs=-FZ@q9lxpK8>2~ z1;bPW_S$^b5B?i##g^J*25%v@P>dBM6F6IY#Ok-mK9MFCtH6kTtM#!W8ExX`DIBsl zit9LG9}+_tc5DltHd7U)XWalZkzXJgHEBjC`_arE-`Ahk)DamN z!5fZ7|49mDDrb#K2hB`BEYrT%)KQss5Pfw^+gIvol

ja(0(uDx+Llje=H9{giIm z#XT-sPbnr%y~GSpZ5{K%h5MZ^yBA18jhVziZL&-c=5je|$^!a9yy5IwA1l_VqueX6 z2!x7Rzu{B$-qz1#uRopC`BmEH&&9GXBlo&R{9vkja0<`X*FX0LXQ}DCDJD)iMPwrK zMDW%mlglYcCM2B!NEckVv!FxPOA9>j9g^@Hz}rl&ZK(yVti#L zSB>bt&s@W%DSQ^caktrymnBxx*Z$7s;<0IQygkuBg%zG=f!OH@y26|q{V>zPo_UPa zic4?dG0)h}wRZ2Z1ElX1e9#GXuQ8xIwUqK5rD*C)*y|05S5Wo#Rjg9OKfDg#TBVz) zG{X<#{G`93JYebZ0bDfz@DtgC4}=1id3q~cm&`mKBIY(Rzf0yejuK;DPt8jTRc5>r z>T;cq?b*Xe(?J(o5a5W6+ORbouxx1tI4PMe*iB3yF>gtx4->?U6Eh;2ar}aqWn$i! z%rd6KfnawFz?fthb4P`Ki=_qp2oa08amR*@+h|`Niuj1xPniGZRfKuJA&GgXk4n6Z z!#jEh*yk)U)s)E&=OkutKT6EI%P=+q81JRGuH@OzUlQ}gETq9YJS(rn{9gAHrY|`L RXwPGj$D0I99^JXQ^dDa}nnC~o diff --git a/avr/usbload/commandline/snesuploader.c b/avr/usbload/commandline/snesuploader.c index 8f038ad..a636955 100644 --- a/avr/usbload/commandline/snesuploader.c +++ b/avr/usbload/commandline/snesuploader.c @@ -170,7 +170,7 @@ int main(int argc, char **argv) addr = 0x000000; cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, - USB_UPLOAD_INIT, BANK_SIZE_SHIFT , 0, NULL, 0, 5000); + USB_BULK_UPLOAD_INIT, BANK_SIZE_SHIFT , 0, NULL, 0, 5000); if (cnt < 0) { fprintf(stderr, "USB error: %s\n", usb_strerror()); @@ -188,7 +188,7 @@ int main(int argc, char **argv) cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | - USB_ENDPOINT_OUT, USB_UPLOAD_ADDR, addr_hi, + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_ADDR, addr_hi, addr_lo, (char *) read_buffer + step, SEND_BUFFER_SIZE, 5000); @@ -211,8 +211,6 @@ int main(int argc, char **argv) } } } - if (bank == 1) - break; } bank = 0; diff --git a/avr/usbload/main.c b/avr/usbload/main.c index 945ce3c..42ee106 100644 --- a/avr/usbload/main.c +++ b/avr/usbload/main.c @@ -103,10 +103,6 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) * ------------------------------------------------------------------------- */ } else if (rq->bRequest == USB_BULK_UPLOAD_INIT) { - if (req_state != REQ_STATUS_IDLE){ - debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: ERROR state is not REQ_STATUS_IDLE\n"); - return 0; - } req_bank = 0; rx_remaining = 0; @@ -118,16 +114,19 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) */ } else if (rq->bRequest == USB_BULK_UPLOAD_ADDR) { - if (req_state != REQ_STATUS_IDLE){ - debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: ERROR state is not REQ_STATUS_IDLE\n"); - return 0; - } req_state = REQ_STATUS_BULK_UPLOAD; req_addr = rq->wValue.word; req_addr = req_addr << 16; req_addr = req_addr | rq->wIndex.word; - debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx \n",req_bank,req_addr); - ret_len = 0; + sram_bulk_write_start(req_addr); + //debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx \n",req_bank,req_addr); + 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 \n", + req_bank, req_addr); + req_bank++; + } + ret_len = USB_MAX_TRANS; /* * ------------------------------------------------------------------------- @@ -336,10 +335,14 @@ int main(void) printf("Use Snes lowrom\n"); snes_lorom(); + printf("IRQ off\n"); + snes_irq_off(); + printf("Activate Snes bus\n"); snes_bus_active(); - while(1); + + while(1); return 0; } diff --git a/avr/usbload/usb_bulk.c b/avr/usbload/usb_bulk.c index e083d65..70da50a 100644 --- a/avr/usbload/usb_bulk.c +++ b/avr/usbload/usb_bulk.c @@ -32,6 +32,7 @@ uint8_t usbFunctionWrite(uint8_t * data, uint8_t len) { uint8_t *ptr; uint8_t i; + if (len > rx_remaining) { printf("ERROR:usbFunctionWrite more data than expected remain: %i len: %i\n", rx_remaining, len); @@ -55,7 +56,7 @@ uint8_t usbFunctionWrite(uint8_t * data, uint8_t len) i = len; while(i--){ sram_bulk_write(*ptr++); - counter_up(); + sram_bulk_write_next(); } } return len;