From 9b4076866f581e74b77bbb41264f082f2bd9b023 Mon Sep 17 00:00:00 2001 From: schlaepfer Date: Fri, 5 May 2006 08:41:03 +0000 Subject: [PATCH] - ch.ntb.usb separated git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@142 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c --- JNIdll/BDI.def | 52 - JNIdll/BDI.dll | Bin 40054 -> 0 bytes JNIdll/BDI_dll.cpp | 849 -- JNIdll/libjvm.a | Bin 2226 -> 0 bytes JNIdll/makefile | 22 - blackbox/BDI.dll | Bin 40054 -> 0 bytes blackbox/Usb/Mod/!Compile.otd | 17 - blackbox/Usb/Mod/BDI.otd | 469 - blackbox/Usb/Mod/BDI332.otd | 109 - blackbox/Usb/Mod/BDI555.otd | 189 - blackbox/Usb/Mod/BDIDll.otd | 178 - blackbox/Usb/Mod/TargLog.otd | 111 - blackbox/Usb/Mod/Utils.otd | 130 - blackbox/Usb/Rsrc/usb.jar | Bin 17289 -> 0 bytes blackbox/Usb/Rsrc/usbpdi.jar | Bin 29360 -> 0 bytes distribute/Definitions.txt | 4 - distribute/LibusbWin.dll | Bin 37716 -> 0 bytes distribute/Output/setup.exe | Bin 419568 -> 0 bytes distribute/USBPDI.cat | 3 - distribute/USBPDI.inf | 106 - distribute/driver_installer_template.iss | 190 - distribute/libusb0.dll | Bin 43008 -> 0 bytes distribute/libusb0.sys | Bin 34816 -> 0 bytes distribute/setupUSBPDI_2.bmp | Bin 154542 -> 0 bytes distribute/setupUSBPDI_2small.bmp | Bin 4158 -> 0 bytes mcdp/resources/targets/general/device.dtd | 37 - mcdp/resources/targets/general/memoryMap.dtd | 17 - .../targets/general/registerDictionary.dtd | 21 - .../targets/mc68332/registerDictionary.dtd | 20 - .../targets/mc68332/registerDictionary.xml | 524 - .../mpc555/devices/deviceAm29LV160D.xml | 38 - .../mpc555/devices/deviceMPC555Flash.xml | 16 - .../targets/mpc555/devices/deviceRAM.xml | 64 - .../targets/mpc555/memoryAssignmentRAM.xml | 21 - mcdp/resources/targets/mpc555/memoryMap.xml | 10 - .../targets/mpc555/registerDictionary.dtd | 20 - .../targets/mpc555/registerDictionary.xml | 1954 --- mcdp/scrapBook.jpage | 115 - mcdp/src/ch/ntb/mcdp/bdi/BDIException.java | 14 - mcdp/src/ch/ntb/mcdp/bdi/MC68332.java | 1065 -- mcdp/src/ch/ntb/mcdp/bdi/MPC555.java | 1179 -- .../src/ch/ntb/mcdp/bdi/blackbox/MC68332.java | 255 - mcdp/src/ch/ntb/mcdp/bdi/blackbox/MPC555.java | 252 - mcdp/src/ch/ntb/mcdp/bdi/test/BDI332App.java | 279 - mcdp/src/ch/ntb/mcdp/bdi/test/BDI332test.java | 718 - mcdp/src/ch/ntb/mcdp/bdi/test/BDI555App.java | 221 - mcdp/src/ch/ntb/mcdp/bdi/test/BDI555test.java | 648 - mcdp/src/ch/ntb/mcdp/bdi/test/Dump332.java | 135 - mcdp/src/ch/ntb/mcdp/bdi/test/FillTest.java | 11016 ---------------- mcdp/src/ch/ntb/mcdp/dict/Register.java | 232 - mcdp/src/ch/ntb/mcdp/dict/RegisterDict.java | 260 - .../ch/ntb/mcdp/dict/test/Test332Dict.java | 32 - .../ch/ntb/mcdp/dict/test/Test555Dict.java | 29 - .../ch/ntb/mcdp/mc68332/IMCBTargetBoard.java | 94 - .../ch/ntb/mcdp/mc68332/MC68332Register.java | 28 - .../ntb/mcdp/mc68332/MC68332RegisterDict.java | 10 - .../ch/ntb/mcdp/mpc555/MPC555Register.java | 33 - .../ntb/mcdp/mpc555/MPC555RegisterDict.java | 10 - .../src/ch/ntb/mcdp/system/memMap/Device.java | 45 - .../ntb/mcdp/system/memMap/MemAttributes.java | 82 - .../ch/ntb/mcdp/system/memMap/MemoryMap.java | 407 - .../ch/ntb/mcdp/system/memMap/Segment.java | 60 - .../system/memMap/test/MemoryMapTest.java | 33 - mcdp/src/ch/ntb/mcdp/uart/Uart.java | 58 - mcdp/src/ch/ntb/mcdp/uart/Uart0.java | 26 - mcdp/src/ch/ntb/mcdp/uart/UartDispatch.java | 137 - .../src/ch/ntb/mcdp/uart/UartInputStream.java | 75 - .../ch/ntb/mcdp/uart/UartOutputStream.java | 52 - mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java | 72 - .../ntb/mcdp/uart/blackbox/test/UartTest.java | 100 - .../mcdp/uart/blackbox/test/UartTestApp.java | 215 - mcdp/src/ch/ntb/mcdp/uart/test/UartTest.java | 118 - .../ch/ntb/mcdp/uart/test/UartTestApp.java | 216 - mcdp/src/ch/ntb/mcdp/usb/DataPacket.java | 45 - mcdp/src/ch/ntb/mcdp/usb/Dispatch.java | 138 - .../ch/ntb/mcdp/usb/DispatchException.java | 14 - mcdp/src/ch/ntb/mcdp/usb/USBDevice.java | 73 - mcdp/src/ch/ntb/mcdp/utils/Redirect.java | 17 - .../ch/ntb/mcdp/utils/logger/LogLevel.java | 13 - .../src/ch/ntb/mcdp/utils/logger/LogUtil.java | 48 - .../ch/ntb/mcdp/utils/logger/McdpLogger.java | 26 - 81 files changed, 23866 deletions(-) delete mode 100644 JNIdll/BDI.def delete mode 100644 JNIdll/BDI.dll delete mode 100644 JNIdll/BDI_dll.cpp delete mode 100644 JNIdll/libjvm.a delete mode 100644 JNIdll/makefile delete mode 100644 blackbox/BDI.dll delete mode 100644 blackbox/Usb/Mod/!Compile.otd delete mode 100644 blackbox/Usb/Mod/BDI.otd delete mode 100644 blackbox/Usb/Mod/BDI332.otd delete mode 100644 blackbox/Usb/Mod/BDI555.otd delete mode 100644 blackbox/Usb/Mod/BDIDll.otd delete mode 100644 blackbox/Usb/Mod/TargLog.otd delete mode 100644 blackbox/Usb/Mod/Utils.otd delete mode 100644 blackbox/Usb/Rsrc/usb.jar delete mode 100644 blackbox/Usb/Rsrc/usbpdi.jar delete mode 100644 distribute/Definitions.txt delete mode 100644 distribute/LibusbWin.dll delete mode 100644 distribute/Output/setup.exe delete mode 100644 distribute/USBPDI.cat delete mode 100644 distribute/USBPDI.inf delete mode 100644 distribute/driver_installer_template.iss delete mode 100644 distribute/libusb0.dll delete mode 100644 distribute/libusb0.sys delete mode 100644 distribute/setupUSBPDI_2.bmp delete mode 100644 distribute/setupUSBPDI_2small.bmp delete mode 100644 mcdp/resources/targets/general/device.dtd delete mode 100644 mcdp/resources/targets/general/memoryMap.dtd delete mode 100644 mcdp/resources/targets/general/registerDictionary.dtd delete mode 100644 mcdp/resources/targets/mc68332/registerDictionary.dtd delete mode 100644 mcdp/resources/targets/mc68332/registerDictionary.xml delete mode 100644 mcdp/resources/targets/mpc555/devices/deviceAm29LV160D.xml delete mode 100644 mcdp/resources/targets/mpc555/devices/deviceMPC555Flash.xml delete mode 100644 mcdp/resources/targets/mpc555/devices/deviceRAM.xml delete mode 100644 mcdp/resources/targets/mpc555/memoryAssignmentRAM.xml delete mode 100644 mcdp/resources/targets/mpc555/memoryMap.xml delete mode 100644 mcdp/resources/targets/mpc555/registerDictionary.dtd delete mode 100644 mcdp/resources/targets/mpc555/registerDictionary.xml delete mode 100644 mcdp/scrapBook.jpage delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/BDIException.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/MC68332.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/MPC555.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/blackbox/MC68332.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/blackbox/MPC555.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/BDI332App.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/BDI332test.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/BDI555App.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/BDI555test.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/Dump332.java delete mode 100644 mcdp/src/ch/ntb/mcdp/bdi/test/FillTest.java delete mode 100644 mcdp/src/ch/ntb/mcdp/dict/Register.java delete mode 100644 mcdp/src/ch/ntb/mcdp/dict/RegisterDict.java delete mode 100644 mcdp/src/ch/ntb/mcdp/dict/test/Test332Dict.java delete mode 100644 mcdp/src/ch/ntb/mcdp/dict/test/Test555Dict.java delete mode 100644 mcdp/src/ch/ntb/mcdp/mc68332/IMCBTargetBoard.java delete mode 100644 mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java delete mode 100644 mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java delete mode 100644 mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java delete mode 100644 mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java delete mode 100644 mcdp/src/ch/ntb/mcdp/system/memMap/Device.java delete mode 100644 mcdp/src/ch/ntb/mcdp/system/memMap/MemAttributes.java delete mode 100644 mcdp/src/ch/ntb/mcdp/system/memMap/MemoryMap.java delete mode 100644 mcdp/src/ch/ntb/mcdp/system/memMap/Segment.java delete mode 100644 mcdp/src/ch/ntb/mcdp/system/memMap/test/MemoryMapTest.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/Uart.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/Uart0.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/UartDispatch.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/UartInputStream.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/UartOutputStream.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTest.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTestApp.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/test/UartTest.java delete mode 100644 mcdp/src/ch/ntb/mcdp/uart/test/UartTestApp.java delete mode 100644 mcdp/src/ch/ntb/mcdp/usb/DataPacket.java delete mode 100644 mcdp/src/ch/ntb/mcdp/usb/Dispatch.java delete mode 100644 mcdp/src/ch/ntb/mcdp/usb/DispatchException.java delete mode 100644 mcdp/src/ch/ntb/mcdp/usb/USBDevice.java delete mode 100644 mcdp/src/ch/ntb/mcdp/utils/Redirect.java delete mode 100644 mcdp/src/ch/ntb/mcdp/utils/logger/LogLevel.java delete mode 100644 mcdp/src/ch/ntb/mcdp/utils/logger/LogUtil.java delete mode 100644 mcdp/src/ch/ntb/mcdp/utils/logger/McdpLogger.java diff --git a/JNIdll/BDI.def b/JNIdll/BDI.def deleted file mode 100644 index 1807a89..0000000 --- a/JNIdll/BDI.def +++ /dev/null @@ -1,52 +0,0 @@ -EXPORTS - UART0_read = _Z10UART0_readPc @1 - destroyJVM = _Z10destroyJVMv @2 - UART0_write = _Z11UART0_writePci @3 - BDI332_break_ = _Z13BDI332_break_v @4 - BDI555_break_ = _Z13BDI555_break_v @5 - BDI555_readCR = _Z13BDI555_readCRv @6 - BDI332_dumpMem = _Z14BDI332_dumpMemiPi @7 - BDI332_fillMem = _Z14BDI332_fillMemPii @8 - BDI332_readMem = _Z14BDI332_readMemii @9 - BDI555_readFPR = _Z14BDI555_readFPRii @10 - BDI555_readGPR = _Z14BDI555_readGPRi @11 - BDI555_readMSR = _Z14BDI555_readMSRv @12 - BDI555_readMem = _Z14BDI555_readMemii @13 - BDI555_readSPR = _Z14BDI555_readSPRi @14 - BDI555_writeCR = _Z14BDI555_writeCRi @15 - BDI332_writeMem = _Z15BDI332_writeMemiii @16 - BDI555_setGpr31 = _Z15BDI555_setGpr31i @17 - BDI555_writeFPR = _Z15BDI555_writeFPRiil @18 - BDI555_writeGPR = _Z15BDI555_writeGPRii @19 - BDI555_writeMSR = _Z15BDI555_writeMSRi @20 - BDI555_writeMem = _Z15BDI555_writeMemiii @21 - BDI555_writeSPR = _Z15BDI555_writeSPRii @22 - USB_Device_open = _Z15USB_Device_openv @23 - BDI555_readFPSCR = _Z16BDI555_readFPSCRv @24 - USB_Device_close = _Z16USB_Device_closev @25 - USB_Device_reset = _Z16USB_Device_resetv @26 - getErrPipeHandle = _Z16getErrPipeHandlev @27 - getOutPipeHandle = _Z16getOutPipeHandlev @28 - BDI332_readSysReg = _Z17BDI332_readSysRegi @29 - BDI555_readMemSeq = _Z17BDI555_readMemSeqi @30 - BDI555_writeFPSCR = _Z17BDI555_writeFPSCRi @31 - BDI332_readUserReg = _Z18BDI332_readUserRegi @32 - BDI332_writeSysReg = _Z18BDI332_writeSysRegii @33 - BDI555_writeMemSeq = _Z18BDI555_writeMemSeqii @34 - checkForExceptions = _Z18checkForExceptionsv @35 - BDI332_reset_target = _Z19BDI332_reset_targetv @36 - BDI332_writeUserReg = _Z19BDI332_writeUserRegii @37 - BDI555_fastDownload = _Z19BDI555_fastDownloadPii @38 - BDI555_reset_target = _Z19BDI555_reset_targetv @39 - BDI332_nopsToLegalCmd = _Z21BDI332_nopsToLegalCmdv @40 - BDI332_isFreezeAsserted = _Z23BDI332_isFreezeAssertedv @41 - BDI555_isFreezeAsserted = _Z23BDI555_isFreezeAssertedv @42 - BDI555_stopFastDownload = _Z23BDI555_stopFastDownloadv @43 - BDI332_reset_peripherals = _Z24BDI332_reset_peripheralsv @44 - BDI555_startFastDownload = _Z24BDI555_startFastDownloadi @45 - BDI332_isTargetInDebugMode = _Z26BDI332_isTargetInDebugModev @46 - BDI555_isTargetInDebugMode = _Z26BDI555_isTargetInDebugModev @47 - USB_Device_getMaxPacketSize = _Z27USB_Device_getMaxPacketSizev @48 - BDI332_go = _Z9BDI332_gov @49 - BDI555_go = _Z9BDI555_gov @50 - createJVM = _Z9createJVMPc @51 diff --git a/JNIdll/BDI.dll b/JNIdll/BDI.dll deleted file mode 100644 index 16e1c18679f4b9ca24e8b400c2ddc666d1d78894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40054 zcmeHw3wTu3x%LVKjTkN}R8-WV1_gyM_nAyGNgx@y7$6c*l*^FIkVKPAPG*8&(MB zKj-g$vi9u#u5Z2TTi^QDW#3ljUcZSAWsGGa3=A-~8^5#_^ZnqvHbjrS_=%Bh*BLKO z*qu@K(u9R|^$ACFOT4zFve8jp+0+zII;vuhmewXmeUqbfeubkkUK7h5F=BX*pe~Ov zR+e!(%lZ1qQg%IKbA~W>gq?QDnHfWZ%n6}u5P-4KA{677&gdLC>79WOg!{HK{QZ#GWa7;_STx@{9<{ln5lettYR8C#u1^3l_1hu}oe3xQ*7 zEAW?FQ<<#Pju;34(T#(N@q=>efbl zF^!Mgs2MUN5oV~e#l%;y$#EODA)d-W`J1+4u3xMnUM+0736ZBEEHnw>us9_LHU6Jx z|9A^5>Uj6sYbw_DW_R9_y>1|5)Ey5YkB+rDnVri^_Z zXI$OwAC21F-Tq8+N#|I&(dhP9l9A2}N8{+&h)w2g-LcHPU$vaqIkdey`R9RynluL! z$2KM}WgTO3dhVahnCq1ePP9KWhYHz~1lB&#I$F}VUg`RX%lB=J9bd9My6l;3M(2=k zlk(fRCf&(~{XiJoM(XrD1kHQ=*d4ueU|?XArsT#|Y~z!ck90+HkX^-wY&<3=- znDh@raDU_kaU314W%PM7c2LG6M8;Ei#Ewu zx*oFa-K`S{FSqclHF%Dd=_ON1xMn3LlC>6+fQjUEXho*%jGTCWFRzU(ofZb$a;ZsI zoNvInkQ=u#GP)yj0tu-Qosn$(WRkx?>?aTthu6y#T~sg2D32~O6hDHSA%8gGz`C#l zAWL4tmX>!2NC?Ln={1GXJ_TS94T*A5O?}qDp^hkT|Hcw}ZqK{XU{Mw)caRBBw#U z{q4JPHuP#8Z|}zW{`TjvKNINw_JcUOh#wuoQ6{D%8+n?J_9I;KFh?1Cw*4I(A(F(T zK2$mIQ!;+f!HcQYWp}h6hrqh0XwTO0qI*DZw%Y-i#Z>gKoI^#Y0#nhCjU#K78A*6S zzlkL4!n}4ywI6~Q3AK}u^pA(p_O_LSWL=o{taTbhvPgtPw;FuB<}l9IP3X(N#CBQKILSzGauIhR1E#at)a3m-XX z5Oeo?;qQvQ+AY+*w$y+6BB+;gYT66x4=vPjmHKiE^{5Ivtv3_(3QkRXK|PjaHFI#S z$EegVkK(nQ?S>c(p5?ct&Lip?PEC73Jc$7T{IKU8e}<^)jJacbHN z>YFUo%T?<0EYx?~Qm-TG22M?TLA}{RJyfOs8Ll#52;D<|XiGhbsGB)8?FIF23-$JX z#URy!`Vhp()`xAWUvhvt$*E~CsQWC`b5-grK|N-nMtvTBQ*GTs)T=o)?FID|k~MkA zhksSHet3jtkgEmtVq5BSiFz%kroEu9vrylsQZEqH(nHqUQa^bysM|O-?FID~3w41? z{a0LkQZ;r%jBLH%mb#Lt@8Hz57t{wW)Ng&H7-Wl}?iJJ@+ESlJ)ayAl?FIGUE!20a z)YAp^*hQMw7vMLw8Xvj{)EhW8?FIEDk~LN16)N@b&(sVuQ&5-LQkN6;CQeOzL4B=- z`ruy_gLGP`TWzWTav`WUb86ZP>RT+-ttz!sP)mc{Z%h5JM14P}roEuNp#Fu0`sw3}L2ee*QtKnO)bHRjW!qLxO?yFo)IwdOQeP~nWq&>F z8aof^AnFG>HSGoU2$D5<$Qdg2zB4p~$UbC}Ep;wYZ|Bss7t}5b^}qjFF-X0jo(nN* zjTN@kzq$a_J2*A%1@#gOb%jbjQc$lF)VJ7DuO{l9oSOE6`c4aV|A&g!KhDw&B5nPE zE%k*&y^B-RUQqwQLj7%(da4E2?z2$;;RD4W4+v_h^@wZjoG+WGyE!%O1@$W%aB}|;(R;~)CV{< z?FIFA3-y;&YQKe=&z@4Kw-WV1PEC73{ep$sp;EswOf!hon$Mn6s3S!EDyOEspnk_f z{fj>-25GZU^Vw4h^?T=n`Vgn4y`Vl}p}s+-o@k*Szu3;!UnAW3}VpZ-zNde2bJAj<41#UPgubuXu;y`X;1LcL9; zUM{GW*;5Mjb7Mi>$Ej&AsNbjdsOPVf_iYRAIGhwlWQGNsXxS3G5NLBda#K733u$bEuZYQ4^uI)kWBaD&iZP=D1zeVa;MAgE<)Jbz z*0|BR?v@iQd5Ml*Mt8OxWC7f4e2s3WMEZF~xQW~kGTgZA$K8H@7kOOQV$D=pskcmS zg3S!MrD^5nD{?E+%3Y?&)uffX3i=!Q)=9Zp+CipXwBIOl4Qb^bQRJG_%6&zVOQw}O z9pzXb8ECs@fQ`Dhd(>myvR<@1zS&)?(@;_M!!S7z&Ucyi_vatT?F zE0JkOq<`Hl{j7D^(GJuiIs0mepf(j(9}UT4H)^^dlJ56sldM+r^c27_VIA&5X(EuM zsO+w_X_c>qD``>&K?RgH>Z&bm+AEM&m(%XtkI^%x+vwR{cce}HKD0D!Oa+3rTB7x7 z6Aj~ugqK^g+K@KYIyIG+$)>d8TY2%dmLyf$oL0I;kygraf7(PJm@O>x*pgO!Wcoa| zrcJcboJZG#Y2_ZpEh$qiYS!7FR@|RnmmO&n?NRffZrtiA=?k)tCl)>1uC#d^#Z9V| za_mkk-ehKdGOgIx?O40hijOn1?n^87O^6NJ+dP*x>0?|WVT}V)tV}yF+VI!RdUqX6 zD_5(?y_#08NRc~~R_VUKj99VURzy9(#plbXJ@IDo^~E?xQJoXrl&mtn$(_l zt4&Y)JxHEvPx~qI)O#VVr+p`FNj^Cf0ab)drB>{K)ZJF6)f+Zp?1y$g*rY8Ka#<`Z_a* zbYz~lG15E0j{Op(P=oU9Lp#RPXA3tk=kbn6PiLfO-M*Y9@@cdE2+^Cium_-Inh~Ne zZKAhzi{kmVH0bfP;=8!G?CX`@yFYCr4_8bdg|r^?L|XCk^m))co@|(UiSn|!99=YX zwwId^U2NM&7tLFFnuVHXM&IxTxMfp;7jYjrx}MjlI+M8Tbnb437pc*;oagxdNS|5Lp78tEJL7+XJNW26s`^QPfA$2G@M>H0xO&J^i|@5#O)rJa8j z_gkd$^TDXjsK#)|KECdjqSExs2*vFeYq1RZ|g@eMOz>F*gD1P!%dP=KZ|_afwmRtLt(KEOzdxCqc?3LW74*0cLw%&X$S8+ zP(1h2tghl>Ob@f#pHE(Dd4FnPbms^jd3EN->6zQ;u>FE26{tmB%~VbAF6*3?Iq+7; zM~j}A!R=cy>hbP%y*2c%)y75JU2ljNs0POFMs+-KF=X~oA@I5dN_G0ND>I&-vwCFP z+RL|3Z#{m-i#S{J;kx{S*3&xav_{Vud-U1KYiV)P?i)R1Lw~ zvm0>s(|1S={VBaXckDN!qU8Hv{C&IIdJjORa|G#*O3xDSwC&v=xqmvgu0A;R#@74y zN4C)E{>WDP>4@y^I*y3_kq0$&yM{j5)z8r#8oE|QH`R{?Q zEdG12E1UnmI_mLZqj9vdBXX$2n=>$W7wp7sn2FkLFU6ZbquTRfGL*Xjy7vr4ajD)% z-Ekez6CL|IxzL_bi2U+CdzN?%nwZgH##7XZmb(Bo$9J>@zU5mM3kXK+wiMQjUjzbfkL17mlzk)8U{2JyP$4A(1YLKk(6&*|AqMU#d^ENs~m#XB<{ zdpj##E2l?upnHP8B29Cg^OP2>zq+ak(qKlq^e8NXGi*cG>&3h4lS-giK96a@srcQ zTllD^IgMWWeQ3m#X0+5vrWuDcgC{K;swEvmhT~;D^|ZyQX*WVmdJB?k%;(?s8fOXn zpi}F|48y9oT_Jl#l58;poph>sjWP1->sWLgqkHF~<5XNx-c#iXN*+^MQBpg7k684@ z8=|LXn**{oEw(w;^oL}6%yMW(W6ao3=11A0LR0)`5Z`0z(%9H!Mv%M|6)0_Q*LG%% zBO%_9ZQ5S8Y#Zpp2aaHrLVt*FU$oaq>G=PrZRyh7rOoxtv86LgXO}iKL=(xHcx%$I zfK7a?rNxNP#;nme(~hJq<*zmVpXdMYSfHdOR+)^=t89$bl*0`ilQaj2l21%_tgNhW zh}Gcoi`mJ+5iD{yv6U^ccyp}DOw$DNDUO?_I5cX5)g&va%(B1?**VwDb=1TX$(HyU zQYaBiwl?cpCngz!70Jq$WPMYu11Um|>W0chqPa3z7jjHY3};hIZ>U^Vnaj~!g2NLN zZ0h31)oy1ao4P92QWa0cLOgoP4NdjBe7vz4hG+@Tn?EnYN-CQ!OFF8#;T&_o=eTAr znTU~&l?}ja)`;jD$J9bcvSkhFlZ-oBVm0+GvFfBF-rC%nggqeJ2(_x~rZpw2rZraA zG*4?y);A=kEfA6-vz7HtH7I~qoZ)QJbqG09* z)NUFH9yc6Tg=eJ^;c;aA*{n8}oLjlN97T^ME9!5CT{NfQ^<>J|DmR=}p~`QJn#Ixa z!f?4-#Bf#{w~4Hc3)Q0VZjdVZ2?DO3h$k(tXZ49ITVk=BW789fSW7ZiL$){RDbiV` zkajlwD?#n(%F0BtG=5W4L%b5HQ`4phA@P#glzgR<(k`u80u4GDZ&q`&OJkKHU3qpl zwbUnLb7PG*I?5<6i@KxsX)h^aG{I|_Ojr^77du@{(UihqCizrT335bIRaVx_#C!Yp zQivI@Wo|FSGv-3XQ<0VjF@nclhVyVCu3JSqedbn39vs=|tQmrYP#Kfw@X}qGRx8AC z!8vdep3+`aMrp<>vCEgVE|IF)N^lYqA<-+#D{O`IIAN@GazZ1J3`fga$lKxUrqWnd zYwcWo)SRYmrO5HIYi4tc$7N$mbUr+4IBSYGCl1Mby`YG(D?P6-q_T_S4o^{Zun4{5f>^D+J@jbd9a1>8d^|r9E!*9i1QDl^t>Cem z4%)GeBq=BbQ+aIs5H?#fV>Wt!u8*0K53ac!hS20CGkED!B`8Z?hjaD8)ou)qVY;*? zSx57SL~C_*ERk5*+R(7Z0Uvg>HcuGNXsR`>p|YuV+Wgk!{FSJRc*~kdOG}(CAGEXXV04n7=kw;!$e&rCQ;4FmZ^ma4DgO{*g?PXm6IS7jm(Nx z%$mL+QaYJUOoS%3hQv(Sfr$%-TAFOFn3%W>R?N+vhQHeCY96ZNO)Kkbr`3Cc{%Oc% zs+P-CWRqLX*vwdRdNSTf)7t5dNtHOnoEd*wzKO|`9TUP1r!2`o?w7B<0J|2b6zum*wfpZvZ_A<6>8e^rGGj?k(W7oUzC(a5hGGA9tX1L+HK zeizOcLnagXy$%?S4*JcRHB!U2TeA@n0;x56F>(-2A!u11I<#1X!N@BqS2gr^Y>BK!{F zeS}XCMy-O)5!?tf5SAb$5N=1f2jM}4T?qRSUPbr=!e0@F+=S&L5H3c@N4N@MDMBN{ zEeM+swjn%*@I1or5dMNNd^OS_co1eHEJbKWxC7x^2s;t>Bm5`AhX`k^fjoj2VGhCy zgjEO|5FS9-gK!Yx4+sMY<8H>f0|>Jbsu0#9+=s9e;YEZVgkfJ|?28D+2+I*}MfeWF z(+Dpiyn*l@!Y2r)uVw6Pgi8>HVu6d(v8cx+HkDn*veL)XvE0U4>>_qHJBN*76WCa^$RTVTo5sGt&SM@d z0ODhQ7GOb^$3iTh6|gWX!~?uyHXVy}l(143VOO%5Y!;i%=CG?+8Jo-IvHAFV|7x~? zRbb(bMOawnTDF*7hecPGu%&DnTh5|v1*>FLteVxZ82ch~qc=F8T|j+xZcRf2{Zd~n zE@8x(9Gk_d9Mi=qu4crMb@(^%lqr&oQfD|46=S#gRE(Y?C-a!DLl~8!ra6j{nj&zi zLl;#-m=7d0-7uf4S#S|K6@VBn;7n$rGxNYkM1*O^pd&kDXt=F0D2hsj`KzF!GnzOn zr!>Dc0d)0XI;F|G`BW>Qq(*t^y2T_w7Y+KUY9&epM4QD5nUqUGnb>;GCUI^i)}3-^jv(Yebsc`2{1C&&Yf8tsfr5kyAUnw|n_e!(HHNGO_QeL1I- zsA!qx^$JSKQTGNY9RgL63c~t&YAJ{s&~w)@J4V=DNz5ywM8kYSby;WiTHXW`r*t-+ zUV>bftJy$iQ(#gwRT!$;fTU|GOxkLwsa~m`d13uRF|8fKNj20Y%Kaw=<&L4D@Fz@$ z>89(f%BGrzn2ut$Y(WFUI+UB%5pm53Hd!2guE4@RP>#bv6N%`$6r76-c0GdVWt|Ye z7ExUntG@BdcuQn;b*!0YyO;%_2J-YAjP62-;7l@aPDM#54|8`ZJXA)RuSto`?Go9j z!vl|!O~=~5>XDS!ppn+zil>xKDCL4!k0sue9*|1tCQqT(Y;&o`Q%g@u7auVBl(h>Y z0%`QxxI80W#F=)>6nzakpVUfYdNeb7CAzn%_$2{~OJXka&+UJU1s1j$B{_T>uC;L9 zV8X`Tj`=*!x0u<125bk#i_*Fx5(T)-Y-SK`@=CU97}LdW$oi$*ao#?zG5^|-WR_p>OT zSvAE;_oFOYAFpC;?2yW;cuNv%46a<+(3+^DxV#}Nn_KX#g|4%UhTtg}ZXOoXFP}y* z)-t5A612D@z}VM^By`y)hO9CYvN`i+M@ujwBxCdp>YBL_Zd1cmkp=T2Ww@P2lXq-m z5PzznF|n$;C8?#HgmgEoYLqlY_0R2piv>pG-pLT$3vkYL{)=;i^8x2e&cn_RooBhG zxT;(Yu6tZtTxYp2a_6|GxxMbY-1oV^?cVNw*!{fwko$M;KKEbTBRv;-ay&jy$P@Fl zdY<$=>v_ZTw&%EKhW@A)3`z3BU`?@iyIe4qM;`bYb};Gf{1?9cU=`xpC{`B(ZA{x$wP{2l)7{zv^! z_@DE?=6}QA>;D)R!6O3a1TG3(8n_}bH?SZO4a5S?fz^Rq0^bch7!gMp0_dYp1g16ZO{Anyghk8%R7?SllRBGkMf3w&IpYO zofpavm4s%6t`02^)r8`qWat~A?}WC6c7*nXo({bbdO7q#=x?DkLS1Mx8=9ze?R|`{9XA^<-d@BF#nDGBl$xLh8K(~7*{Z{;EDo&L4Luq zf>^-~1&M;Tf;$WDF8D^l?t<=uUljaD!5al{74#N-P;gH8g0LezIqVM?glC4!!cE~- z;V*^n2;UvPFZ@9G`{C!qzYM?{1FaA?uUqH~ITMd6|uMOPIqE?QnxU({5zsp$Tq zZx?;9=*LBSiuM&fUv#YK&qe)3%z=9;@Tm;vNaq;m#m*e(mCkw23g=R1y)*8-+4*H> zm-7eCe|J9a+~<73`D^Fv&J)f|*BP#}T^GA1x|}Yb>snXTRpV-O-Rx>}b-FgWe&l+> z^|b3b*RNe~xPI?C<{IH1>ptIoiQDP+yQjOabl16?-L39h-JR~c-CNvU?!E38-3Q&j zb^qSo>;9|zg!>}TrJgH1Ue9#TOwR((wVpMe+dOxAzUJBDdBF3q=SQAbJ%>GSdEWE< z)$@rb%R9n5%^UC*cq85g-o@T(Z=Lrp?>+F|t=@;dKlc92yVv`!_mAEWy&rqCd?S75 z`7ZJm`)2v(`mXU+`|5p3-x}YyeA|56eUJKn=G*6c+4rjNBktAN{`347`!DxT^Iz@1 z&cEDW>reV`_P6`*^6&8P^6&9K0h_v~>&M{r^=H<%C4E(=~AOa#9aYzuY-zY*LL{C;pp z@IQjD1>Xq16Z|0f*Wi%6)AMq;Uq|y=^KQ?3C~sHZQ+dD2JDm4!-p6^Fp%I}=LQ_J% z&{d&@p=F^&Xl*$WpVC+nI-i1z&v%nc~E^*d48=c>9 zKH}Wve8u^ub2z*#*A;MG<*IkJxW43i(6!ffvHKc#6n@m{-i#jZ33$)}_n+MT?hMaG zp36K=PlabG`nNB6?(l5%JmT5y`8mAh40y+_@QW?ppL<`zEx8MPIligBQePE%vNGYe0?Pli1wRg+mUmX(c+_HU-t@dG)Z#7Z znSPb`cHWTC*`Y6n+@Tqv1)-`?OX&8{J)s9eKMFk)dL_hf5At}Ij>vV9DLG{`G~*}uIgd{DO|FSd0J<5-=u!HCT<4eoo_mIa4wX%oeH>7&>?n95 z*}8J2T6iDgyQPM9d5N{0H5t<945Uy6Ka0)|q}FuCfn}3AZv(FBjO$C9h2~Z_H=AT5 zI6gRt&Lp}7fmVdj>VlAZggX^vJ&@fB@?9X$D9B?#4k*ZeAV=`zhHNl2;{xoBjcSax z_YpK1coauQLwq})-wc+DK0(lAWU5La`%aQ-gDxXe{Rqf%7}+TMD?m0V$bSJT#xpAX zpcHvrN4b-w7>@%@MlxRw5S8SckE9bQzh77Ts8k z#$l9VJdheacYDj1>N1k27RZAN&n-X>D9C0Y#}(uuAmh>Kjoe=XvH?%&G>aA4mf|$n zSd)>thk%qSJoA7wD9AD(n-%0HAWtgDy+C^O`YN`~{S{qC=01EFo)#)RlYv|W(;4N8 z04dh3YF|4y=`xb}K_FvvYlLj|IikzRROgclN{CX@mw}8MZ!Y^EfGkvyPk`K|Am`%ixo!oS2IPGOp)c&lV?j5= zs!M<@P>^OIZ3^-gAde}?79ejb$d7k6_D z$mmPVJcof4D#%Abk_vKeHuO=D$v~E##Lf-6j4Z_ufvnZbKE<}|J-UocHDLsvpy!x% z_5mqJa;@L6@1qjBjO5t?WZV@pm3@7^qRUV!Ij_^^Bs89GfE6wpYF0dTj#O-p=Erhg z=fD}da_}7IxOpf47Y1RJ!O)Di;VJ4S^;rSsdD)rFy%>T+5QZ{6F9`6wnD*Z;asoLJ zKqp8t{QqC%`1*0CAl|K3#80383K=o${xM{sp&` zM6abIvJ}m-6jT(;mQpS|8S!619I~W#GFnO9lfcjQq4lM>eT@vIHK#gTg1BQX|m zf3`0d$y^MXZYhJS$SCE-9GA+TP5Oq$Lp?wyEOZtn)wk5Lldr0VOz8nK=xSEoWPQC2 zSgWt*M69(YKDCAZLR1}hQ>|g+EuwaG z4Ko~EBlAvZ2>Az%YH7HxIUM@LO2YOM$)1ZMdcJITPf_NLOh@aL) z6f*KZcYUthPZ&I6ym-}`mv^ld@z)utMDC8ym3t$v?Bh+ zMk-PE&zJk?l(P3&^YU)8BL1x@xv%(KWv8#_)w1_m^YU)CBK{pIxi^2V+-aQvHTNUd zyu9nJh<|-b?rondck1ZW+z(mv^0rwKe=;TaO`j|GeuGD}xP#WbysNEVL58-unmBS$IO<$z=lLr1xgvMuufeDc5Hjh3P(k+AelVeRRvy zd`yw?XB(-6N9~jz^_g-%Wbg=U?6&6RU13H1Q;bw1_wLV?`>O_z$bFYJFYi(-;&&LS zMD7PaSMCQ49+CSFYhK=kR>aSYRKn-GfSjyPFnDC2V9HCB;)pB-_^jJMx=$c}?oosE z3EOp<^nF74U^2o!j|^fT*>?U1%kHfiOlRQ!W{uz#YO zH44wjc)dI9uPal012>w<1x?#O%r~l&@s-8)HG8407#p{^DK}P3i6*oXftwuUm#RsO`lJI9KxBw{DslD--}3UJDLprSF{>M zW)=|YMU7NTfykZ>r4TPiI+aqyA#)I^4Cb{!HYhxsfzWFNv_g-T`@=X(Dl#vS40D)d z-T~rOWIg~w+8I0}#4RDC>=y%({i>E1Er>1e*J(&WN~(E4URCm1288-L!y5krgs!#> zdsrH@RoIS>qeeo8Wmoqq|0?rRz{9{^G7 zYZNk~x-ew$pMV+l^9B+EvO+=T0-?Ep-+%-aef9vM&0u~WNC6N{!>D*Kx=mp|l#=Q_Abol&V*C`yBn8RF z$Chd-E&#Gmk;w-_eVtK*3xKRvWSW5-QDnX>c#Kr{04Y{dZ3oh=AWs7!a~eMO3Xolj z%)3C|QINj@IjA7nU(jTX+|LKHQ<0elge+?0RSM*|E`vV2sYbK{qb`<0hAEb>2hw1q z60frtD>ADgV~lYSW_JQPgkM9$dx0#}c}Qj}5NZa7hI=?-_Kg>T(3ot<(7*V}Qhclr z$g7ai@``FN>9b9WhMz)aw32G%xs0_b$mKw2GprE+(hNlNOo}T9vPnT|f%F40N_smG z8XXMet3b#z4dgo_mBIWt5X#vo>B~Tl05N2GfzW2id;(-K5JP6vIBm2t@|pmIHUsek zDFb4pnjvHi=H)5KDj+mo7(90Z>E?DOx2CxbefH3-SpMsf*{REr9uERhd$wnR$hoLC zejNrfOVO|g$QA`T0faWAzOwO7(+VZ`F94~7j8W3bK-TKW44g$vv33a_I+ZL~Sb@)n zu^L&i%Z<|1w9dm7mE~7e-^?le)~~a)R0JzuacQvA_|9vU_DDV_di^|?GdgEg zRQrm=vLC@L3LOJ6T_SO}rkT&C=Rqk@8?PdIMiU zt$Y=)6KO48z*9g)2B#u{SDSXsQfvSC4NWu!b0jVoSt0~Sq8 zamhi2?dby*u_WqqdP_^?8m!EOFP9_bE*G-E*LWPP=O4|dG^$fdW}9VjVO>l7rg^cO z)V7;am~?Wsq%Ic-WjP}F%-E`MYP{|_HXk^nmXwd@`Fa4H)g>#}v`he`=~Hs5a?6+D zh_U@79k`iCTSUN`srX{wBCD+#V3if$=38X7g$S&&+Bg3eQEhPpTicpD?6P=M?WwgF z)6g(jBGt}v?E)w#+cnvlFD778m|K~D#1Bw@E>41cr8;e3mv-l}9Ow1Nzdom$vj4gq ze6r#(6XDBwXvxxkVlPxxmZz|MgANh-O?qnoHQ1N*qI=UmmcLS2xl${nOpF_>v~C<< zCjhxg*tG10ea(6npmV8A#PpWa5NnJzB@>oDK=3N#s{1pfwawg>htd3G8CRyZNCU(|Vvv>ibgj8AR5W-0e0-mifGYKDCB&%E`EAk}t?khA+}#s_xV- ziKGdYD@;%+bzkH(GDhp%Y?swQ61h?aPhzZyani*ckW^jo#olsW;f6ETBxAgKB8DHj zF&0%xyu6a@sXF3kN^P%z6Mk_DnWs33`!gg=S=h!_6;}`=tFDSZA}dzFkZjW~PBo!@ zwr-4{dbV~0Xo`Ti+~XGubp2Le*??vFYG5O}tgCH^S5-DdYxt7{1=1caM6vc1E&3O2 zX>Cf@H^$(mcsCF${IxLi%YsuI>Jv%4F&L#42xiZ-_5p$gu({0(emmuyJbYGfYYpm{@mm9}g`v=Z0&^!7H-LtLyxQ6K7} z(NY6_DuvasqS5-s=4e!3bfVZRA?+4bN*b|n7pemO7>%zaMXPU&R>vC~>ysu6YO?@! zSOvA3iVD=SDn`k0w>_#|5|fiRR^AYAfj3qq)+Ca##wgbQOknm*f>DSiqpRs(2jD&k zA#z0xt~-oERJuikc)cNRs$#5=W-g#M$$?Q!BAU(3OSwr6>c!1TVM1+f3|dT+uWUcP z*n|5sf=IVGW`_z$IbtR%ZO+&5fTlHA00*~I&}_8@+^M+{m8@EAu`m*pjx1aU@2eOE zjSkWdBJ)a3m1Q3HOqEm@t86yatmZ1>v6{JPR0?y+h)!KCNw2nMLp`f)xE-t@rrwId zEuJvDnQe7aI^$jdQo=$t=5`3E zzOk}47Old(k9%tZy(M`r`tRB%n*LeLZZlH`$)FvWsYG%bt(${9O><*f$xd+^?#Tk8 zb?>#A4l?6Cpmw7jzO8iXh%Hh2KHgi%C1Rpc@;8x^H(**xzdYHJz#!Fx?nu-{wOOVS zi|1RT^`|rl8uvUS1YcGmHVl-w0D$N6OP$BfUGT9Rbu237aV$}k~zdGm_j%4gu~nj zMUK>$XuYTE&lbyynJL-RR4h{gsB5&0dzw|`V9eVB`4Qw~ug*IRQ>QNKKWQ|2Q=cwI zTiFiv&JKK9PTB%Snh$e_CC4U>6&JP4Noed89%(9#){BdEH_cWPT>`DyD6+MmQb>;= z50s6bk26Xo@j5U}tJQ~20Klb0VAswy& diff --git a/JNIdll/BDI_dll.cpp b/JNIdll/BDI_dll.cpp deleted file mode 100644 index f911df2..0000000 --- a/JNIdll/BDI_dll.cpp +++ /dev/null @@ -1,849 +0,0 @@ -#include -#include -#include -#include - -#define EXPORT JNIEXPORT - -#define NOF_VM_ARGS 4 - -#define PIPEBUFSIZE 4096 -#define PIPE_TIMEOUT 500 //ms - -// Classes -#define USB_Device_Class "ch/ntb/mcdp/usb/USBDevice" -#define BDI555_Class "ch/ntb/mcdp/bdi/blackbox/MPC555" -#define BDI332_Class "ch/ntb/mcdp/bdi/blackbox/MC68332" -#define Redirect_Class "ch/ntb/mcdp/utils/Redirect" -#define Uart0_Class "ch/ntb/mcdp/uart/blackbox/Uart0" - -// JVM handles -JNIEnv *env = NULL; -JavaVM *jvm = NULL; - -// Pipe names -char stdout_pipename[32] = "\\\\.\\pipe\\BDIDll_stdout"; -char stderr_pipename[32] = "\\\\.\\pipe\\BDIDll_stderr"; -// Pipe handles -HANDLE hStdout_pipe, hStderr_pipe; - -// status flags -int stdOutErr_redirected = FALSE; -int jvm_created = FALSE, jvm_classPtrs_done = FALSE, \ - jvm_mIDs_done = FALSE, jvm_redirection_done = FALSE; - -// Java classes -jclass cls_USB_Device, cls_BDI555, cls_BDI332, cls_Redirect, cls_Uart0; -// USB_Device -jmethodID mid_USB_Dev_open, mid_USB_Dev_close, mid_USB_Dev_reset, \ -mid_USB_Dev_getMaxPacketSize; -// BDI555 -jmethodID mid_BDI555_break_, mid_BDI555_go, mid_BDI555_reset_target, \ -mid_BDI555_isFreezeAsserted, mid_BDI555_startFastDownload, mid_BDI555_fastDownload, \ -mid_BDI555_stopFastDownload, mid_BDI555_writeMem, mid_BDI555_readMem, \ -mid_BDI555_writeMemSeq, mid_BDI555_readMemSeq, mid_BDI555_readGPR, \ -mid_BDI555_writeGPR, mid_BDI555_readSPR, mid_BDI555_writeSPR, mid_BDI555_readMSR, \ -mid_BDI555_writeMSR, mid_BDI555_readFPR, mid_BDI555_writeFPR, mid_BDI555_readCR, \ -mid_BDI555_writeCR, mid_BDI555_readFPSCR, mid_BDI555_writeFPSCR, \ -mid_BDI555_isTargetInDebugMode, mid_BDI555_setGpr31; -// BDI332 -jmethodID mid_BDI332_nopsToLegalCmd, mid_BDI332_break_, mid_BDI332_go, \ -mid_BDI332_reset_target, mid_BDI332_reset_peripherals, mid_BDI332_isFreezeAsserted, \ -mid_BDI332_fillMem, mid_BDI332_dumpMem, mid_BDI332_writeMem, mid_BDI332_readMem, \ -mid_BDI332_readUserReg, mid_BDI332_writeUserReg, mid_BDI332_readSysReg, \ -mid_BDI332_writeSysReg, mid_BDI332_isTargetInDebugMode; -// Redirect -jmethodID mid_Redirect_redirect; -// Uart0 -jmethodID mid_Uart0_write, mid_Uart0_read; - -BOOL setupNamedPipes(){ - - hStdout_pipe = CreateNamedPipe( - stdout_pipename, // pipe name - PIPE_ACCESS_INBOUND,// server only writes and client only reads - PIPE_TYPE_BYTE | // message type pipe - PIPE_WAIT, // non blocking mode - 1, // max. instances - PIPEBUFSIZE, // output buffer size - PIPEBUFSIZE, // input buffer size - PIPE_TIMEOUT, // client time-out - NULL); // default security attribute - - if (hStdout_pipe == INVALID_HANDLE_VALUE) - { - fprintf(stderr, "CreateNamedPipe (stdout_pipe) failed\n"); - return FALSE; - } - - hStderr_pipe = CreateNamedPipe( - stderr_pipename, // pipe name - PIPE_ACCESS_INBOUND,// server only writes and client only reads - PIPE_TYPE_BYTE | // message type pipe - PIPE_WAIT, // non blocking mode - 1, // max. instances - PIPEBUFSIZE, // output buffer size - PIPEBUFSIZE, // input buffer size - PIPE_TIMEOUT, // client time-out - NULL); // default security attribute - - if (hStderr_pipe == INVALID_HANDLE_VALUE) - { - fprintf(stderr, "CreateNamedPipe (stderr_pipe) failed\n"); - return FALSE; - } - // Connect the reading end of the hStdout_pipe and assign it to stdout - if (freopen(stdout_pipename, "w", stdout) == NULL) { - fprintf(stderr, "freopen(stdout_pipename, w, stdout) failed\n"); - return FALSE; - } - - // Connect the reading end of the hStderr_pipe and assign it to sterr - if (freopen(stderr_pipename, "w", stderr) == NULL) { - fprintf(stderr, "freopen(stderr_pipename, w, stderr) failed\n"); - return FALSE; - } - return TRUE; -} - -void flushAll() -{ - fflush(stderr); - fflush(stdout); -} - -void fprintf_flush(FILE* stream, const char *format, ...) -{ - va_list argptr; - va_start(argptr, format); - - vfprintf(stream, format, argptr); - fflush(stream); -} - -EXPORT HANDLE getOutPipeHandle(){ - return hStdout_pipe; -} - -EXPORT HANDLE getErrPipeHandle(){ - return hStderr_pipe; -} - -EXPORT int destroyJVM() -{ - jint result = -1; - if (env) { - if (env->ExceptionOccurred()) { - env->ExceptionDescribe(); - } - } - if (jvm) { - result = jvm->DestroyJavaVM(); - fprintf_flush(stderr, "JVM destroyed\n"); - } - // reset flags - jvm_created = FALSE; - jvm_classPtrs_done = FALSE; - jvm_mIDs_done = FALSE; - jvm_redirection_done = FALSE; - - return result; -} - -jint JNICALL _vfprintf_(FILE *fp, const char *format, va_list args) -{ - jint result = vfprintf(stderr, format, args); - return result; -} - -EXPORT int createJVM(char *classpath) -{ - char javaclasspath[1024]; - jint res; - JavaVMInitArgs vm_args; - JavaVMOption options[NOF_VM_ARGS]; - - if (!stdOutErr_redirected) { - // writing to the stdout/stderr stream will write to pipes - // USE fprintf_flush INSTEAD OF printf/fprintf TO WRITE TO THE PIPES - if (!setupNamedPipes()) { - fprintf_flush(stderr, "setupNamedPipes() failed\n"); - return FALSE; - } - stdOutErr_redirected = TRUE; - } - - if (!jvm_created) { - - fprintf_flush(stdout, "Starting JVM: classpath: %s\n", classpath); - - sprintf(javaclasspath, "-Djava.class.path=%s", classpath); - - options[0].optionString = "-Xmx20m"; // specify the maximum heap size that the JVM is allowed to grow to - options[1].optionString = javaclasspath; - options[2].optionString = "-verbose:class,jni"; - options[3].optionString = "-Djava.compiler=NONE"; - - vm_args.version = JNI_VERSION_1_4; - vm_args.options = options; - vm_args.nOptions = NOF_VM_ARGS; - vm_args.ignoreUnrecognized = JNI_FALSE; - - /* Create the Java VM */ - res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); - if (res < 0) { - fprintf_flush(stderr, "Can't create Java VM\n"); - return FALSE; - } - jvm_created = TRUE; - } else { - fprintf_flush(stdout, "JVM already created -> trying to redirect ouput streams\n"); - } - - if (!jvm_redirection_done) { - cls_Redirect = env->FindClass(Redirect_Class); - if (cls_Redirect == 0) { - fprintf_flush(stderr, "Can't find %s class\n", Redirect_Class); - return FALSE; - } - - // Redirect Class - mid_Redirect_redirect = env->GetStaticMethodID(cls_Redirect, "redirect", "()V"); - if (mid_Redirect_redirect == 0) { - fprintf_flush(stderr, "Can't find Redirect.redirect\n"); - return FALSE; - } - - // Call redirect - env->CallStaticVoidMethod(cls_Redirect, mid_Redirect_redirect); - - jvm_redirection_done = TRUE; - } else { - fprintf_flush(stdout, "Redirection already done -> creating class pointers\n"); - } - - if (!jvm_classPtrs_done) { - /* create class pointers */ - cls_USB_Device = env->FindClass(USB_Device_Class); - if (cls_USB_Device == 0) { - fprintf_flush(stderr, "Can't find %s class\n", USB_Device_Class); - return FALSE; - } - - cls_BDI555 = env->FindClass(BDI555_Class); - if (cls_BDI555 == 0) { - fprintf_flush(stderr, "Can't find %s class\n", BDI555_Class); - return FALSE; - } - - cls_BDI332 = env->FindClass(BDI332_Class); - if (cls_BDI332 == 0) { - fprintf_flush(stderr, "Can't find %s class\n", BDI332_Class); - return FALSE; - } - - cls_Uart0 = env->FindClass(Uart0_Class); - if (cls_Uart0 == 0) { - fprintf_flush(stderr, "Can't find %s class\n", Uart0_Class); - return FALSE; - } - jvm_classPtrs_done = TRUE; - } else { - fprintf_flush(stdout, "Class Pointers already created -> creating method IDs\n"); - } - - if (!jvm_mIDs_done) { - /* create method pointers */ - // USB_Device - mid_USB_Dev_open = env->GetStaticMethodID(cls_USB_Device, "open", "()V"); - if (mid_USB_Dev_open == 0) { - fprintf_flush(stderr, "Can't find USB_Device.open\n"); - return FALSE; - } - mid_USB_Dev_close = env->GetStaticMethodID(cls_USB_Device, "close", "()V"); - if (mid_USB_Dev_close == 0) { - fprintf_flush(stderr, "Can't find USB_Device.close\n"); - return FALSE; - } - mid_USB_Dev_reset = env->GetStaticMethodID(cls_USB_Device, "reset", "()V"); - if (mid_USB_Dev_reset == 0) { - fprintf_flush(stderr, "Can't find USB_Device.reset\n"); - return FALSE; - } - mid_USB_Dev_getMaxPacketSize = env->GetStaticMethodID(cls_USB_Device, "getMaxPacketSize", "()I"); - if (mid_USB_Dev_getMaxPacketSize == 0) { - fprintf_flush(stderr, "Can't find USB_Device.getMaxPacketSize\n"); - return FALSE; - } - - // BDI555 - mid_BDI555_break_ = env->GetStaticMethodID(cls_BDI555, "break_", "()V"); - if (mid_BDI555_break_ == 0) { - fprintf_flush(stderr, "Can't find BDI555.break_\n"); - return FALSE; - } - mid_BDI555_go = env->GetStaticMethodID(cls_BDI555, "go", "()V"); - if (mid_BDI555_go == 0) { - fprintf_flush(stderr, "Can't find BDI555.go\n"); - - return FALSE; - } - mid_BDI555_reset_target = env->GetStaticMethodID(cls_BDI555, "reset_target", "()V"); - if (mid_BDI555_reset_target == 0) { - fprintf_flush(stderr, "Can't find BDI555.reset_target\n"); - return FALSE; - } - mid_BDI555_isFreezeAsserted = env->GetStaticMethodID(cls_BDI555, "isFreezeAsserted", "()Z"); - if (mid_BDI555_isFreezeAsserted == 0) { - fprintf_flush(stderr, "Can't find BDI555.isFreezeAsserted\n"); - return FALSE; - } - mid_BDI555_startFastDownload = env->GetStaticMethodID(cls_BDI555, "startFastDownload", "(I)V"); - if (mid_BDI555_startFastDownload == 0) { - fprintf_flush(stderr, "Can't find BDI555.startFastDownload\n"); - return FALSE; - } - mid_BDI555_fastDownload = env->GetStaticMethodID(cls_BDI555, "fastDownload", "([II)V"); - if (mid_BDI555_fastDownload == 0) { - fprintf_flush(stderr, "Can't find BDI555.fastDownload\n"); - return FALSE; - } - mid_BDI555_stopFastDownload = env->GetStaticMethodID(cls_BDI555, "stopFastDownload", "()V"); - if (mid_BDI555_stopFastDownload == 0) { - fprintf_flush(stderr, "Can't find BDI555.stopFastDownload\n"); - return FALSE; - } - mid_BDI555_writeMem = env->GetStaticMethodID(cls_BDI555, "writeMem", "(III)V"); - if (mid_BDI555_writeMem == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeMem\n"); - return FALSE; - } - mid_BDI555_readMem = env->GetStaticMethodID(cls_BDI555, "readMem", "(II)I"); - if (mid_BDI555_readMem == 0) { - fprintf_flush(stderr, "Can't find BDI555.readMem\n"); - return FALSE; - } - mid_BDI555_writeMemSeq = env->GetStaticMethodID(cls_BDI555, "writeMemSeq", "(II)V"); - if (mid_BDI555_writeMemSeq == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeMemSeq\n"); - return FALSE; - } - mid_BDI555_readMemSeq = env->GetStaticMethodID(cls_BDI555, "readMemSeq", "(I)I"); - if (mid_BDI555_readMemSeq == 0) { - fprintf_flush(stderr, "Can't find BDI555.readMemSeq\n"); - return FALSE; - } - mid_BDI555_readGPR = env->GetStaticMethodID(cls_BDI555, "readGPR", "(I)I"); - if (mid_BDI555_readGPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readGPR\n"); - return FALSE; - } - mid_BDI555_writeGPR = env->GetStaticMethodID(cls_BDI555, "writeGPR", "(II)V"); - if (mid_BDI555_writeGPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeGPR\n"); - return FALSE; - } - mid_BDI555_readSPR = env->GetStaticMethodID(cls_BDI555, "readSPR", "(I)I"); - if (mid_BDI555_readSPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readSPR\n"); - return FALSE; - } - mid_BDI555_writeSPR = env->GetStaticMethodID(cls_BDI555, "writeSPR", "(II)V"); - if (mid_BDI555_writeSPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeSPR\n"); - return FALSE; - } - mid_BDI555_readMSR = env->GetStaticMethodID(cls_BDI555, "readMSR", "()I"); - if (mid_BDI555_readMSR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readMSR\n"); - return FALSE; - } - mid_BDI555_writeMSR = env->GetStaticMethodID(cls_BDI555, "writeMSR", "(I)V"); - if (mid_BDI555_writeMSR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeMSR\n"); - return FALSE; - } - mid_BDI555_readFPR = env->GetStaticMethodID(cls_BDI555, "readFPR", "(II)J"); - if (mid_BDI555_readFPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readFPR\n"); - return FALSE; - } - mid_BDI555_writeFPR = env->GetStaticMethodID(cls_BDI555, "writeFPR", "(IIJ)V"); - if (mid_BDI555_writeFPR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeFPR\n"); - return FALSE; - } - mid_BDI555_readCR = env->GetStaticMethodID(cls_BDI555, "readCR", "()I"); - if (mid_BDI555_readCR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readCR\n"); - return FALSE; - } - mid_BDI555_writeCR = env->GetStaticMethodID(cls_BDI555, "writeCR", "(I)V"); - if (mid_BDI555_writeCR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeCR\n"); - return FALSE; - } - mid_BDI555_readFPSCR = env->GetStaticMethodID(cls_BDI555, "readFPSCR", "()I"); - if (mid_BDI555_readFPSCR == 0) { - fprintf_flush(stderr, "Can't find BDI555.readFPSCR\n"); - return FALSE; - } - mid_BDI555_writeFPSCR = env->GetStaticMethodID(cls_BDI555, "writeFPSCR", "(I)V"); - if (mid_BDI555_writeFPSCR == 0) { - fprintf_flush(stderr, "Can't find BDI555.writeFPSCR\n"); - return FALSE; - } - mid_BDI555_isTargetInDebugMode = env->GetStaticMethodID(cls_BDI555, "isTargetInDebugMode", "()Z"); - if (mid_BDI555_isTargetInDebugMode == 0) { - fprintf_flush(stderr, "Can't find BDI555.isTargetInDebugMode\n"); - return FALSE; - } - mid_BDI555_setGpr31 = env->GetStaticMethodID(cls_BDI555, "setGpr31", "(I)V"); - if (mid_BDI555_setGpr31 == 0) { - fprintf_flush(stderr, "Can't find BDI555.setGpr31\n"); - return FALSE; - } - - // BDI332 - mid_BDI332_nopsToLegalCmd = env->GetStaticMethodID(cls_BDI332, "nopsToLegalCmd", "()V"); - if (mid_BDI332_nopsToLegalCmd == 0) { - fprintf_flush(stderr, "Can't find BDI332.nopsToLegalCmd\n"); - return FALSE; - } - mid_BDI332_break_ = env->GetStaticMethodID(cls_BDI332, "break_", "()V"); - if (mid_BDI332_break_ == 0) { - fprintf_flush(stderr, "Can't find BDI332.break_\n"); - return FALSE; - } - mid_BDI332_go = env->GetStaticMethodID(cls_BDI332, "go", "()V"); - if (mid_BDI332_go == 0) { - fprintf_flush(stderr, "Can't find BDI332.go\n"); - return FALSE; - } - mid_BDI332_reset_target = env->GetStaticMethodID(cls_BDI332, "reset_target", "()V"); - if (mid_BDI332_reset_target == 0) { - fprintf_flush(stderr, "Can't find BDI332.reset_target\n"); - return FALSE; - } - mid_BDI332_reset_peripherals = env->GetStaticMethodID(cls_BDI332, "reset_peripherals", "()V"); - if (mid_BDI332_reset_peripherals == 0) { - fprintf_flush(stderr, "Can't find BDI332.reset_peripherals\n"); - return FALSE; - } - mid_BDI332_isFreezeAsserted = env->GetStaticMethodID(cls_BDI332, "isFreezeAsserted", "()Z"); - if (mid_BDI332_isFreezeAsserted == 0) { - fprintf_flush(stderr, "Can't find BDI332.isFreezeAsserted\n"); - return FALSE; - } - mid_BDI332_fillMem = env->GetStaticMethodID(cls_BDI332, "fillMem", "([II)V"); - if (mid_BDI332_fillMem == 0) { - fprintf_flush(stderr, "Can't find BDI332.fillMem\n"); - return FALSE; - } - mid_BDI332_dumpMem = env->GetStaticMethodID(cls_BDI332, "dumpMem", "(I)[I"); - if (mid_BDI332_dumpMem == 0) { - fprintf_flush(stderr, "Can't find BDI332.dumpMem\n"); - return FALSE; - } - mid_BDI332_writeMem = env->GetStaticMethodID(cls_BDI332, "writeMem", "(III)V"); - if (mid_BDI332_writeMem == 0) { - fprintf_flush(stderr, "Can't find BDI332.writeMem\n"); - return FALSE; - } - mid_BDI332_readMem = env->GetStaticMethodID(cls_BDI332, "readMem", "(II)I"); - if (mid_BDI332_readMem == 0) { - fprintf_flush(stderr, "Can't find BDI332.readMem\n"); - return FALSE; - } - mid_BDI332_readUserReg = env->GetStaticMethodID(cls_BDI332, "readUserReg", "(I)I"); - if (mid_BDI332_readUserReg == 0) { - fprintf_flush(stderr, "Can't find BDI332.readUserReg\n"); - return FALSE; - } - mid_BDI332_writeUserReg = env->GetStaticMethodID(cls_BDI332, "writeUserReg", "(II)V"); - if (mid_BDI332_writeUserReg == 0) { - fprintf_flush(stderr, "Can't find BDI332.writeUserReg\n"); - return FALSE; - } - mid_BDI332_readUserReg = env->GetStaticMethodID(cls_BDI332, "readUserReg", "(I)I"); - if (mid_BDI332_readUserReg == 0) { - fprintf_flush(stderr, "Can't find BDI332.readUserReg\n"); - return FALSE; - } - mid_BDI332_writeSysReg = env->GetStaticMethodID(cls_BDI332, "writeSysReg", "(II)V"); - if (mid_BDI332_writeSysReg == 0) { - fprintf_flush(stderr, "Can't find BDI332.writeSysReg\n"); - return FALSE; - } - mid_BDI332_readSysReg = env->GetStaticMethodID(cls_BDI332, "readSysReg", "(I)I"); - if (mid_BDI332_readSysReg == 0) { - fprintf_flush(stderr, "Can't find BDI332.readSysReg\n"); - return FALSE; - } - mid_BDI332_isTargetInDebugMode = env->GetStaticMethodID(cls_BDI332, "isTargetInDebugMode", "()Z"); - if (mid_BDI332_isTargetInDebugMode == 0) { - fprintf_flush(stderr, "Can't find BDI332.isTargetInDebugMode\n"); - return FALSE; - } - - // Uart0 Class - mid_Uart0_write = env->GetStaticMethodID(cls_Uart0, "write", "([BI)Z"); - if (mid_Uart0_write == 0) { - fprintf_flush(stderr, "Can't find Uart0.write\n"); - return FALSE; - } - mid_Uart0_read = env->GetStaticMethodID(cls_Uart0, "read", "()[B"); - if (mid_Uart0_read == 0) { - fprintf_flush(stderr, "Can't find Uart0.read\n"); - return FALSE; - } - - jvm_mIDs_done = TRUE; - } else { - fprintf_flush(stdout, "Method IDs already created -> everything successfully set up!\n"); - } - - return TRUE; -} - -/* Exception Handling - * This function has to be called after every function (which may throw an exception) - * returns TRUE (0) if an exception occured, FALSE (#0) if not - */ -EXPORT int checkForExceptions() { - jthrowable exc; - exc = env->ExceptionOccurred(); - if (exc) { - env->ExceptionDescribe(); - env->ExceptionClear(); - return TRUE; - } - return FALSE; -} - -/* USB_Device methods - * - * For documentation see the java doc. - */ -EXPORT void USB_Device_open() -{ - env->CallStaticVoidMethod(cls_USB_Device, mid_USB_Dev_open); -} - -EXPORT void USB_Device_close() -{ - env->CallStaticVoidMethod(cls_USB_Device, mid_USB_Dev_close); -} - -EXPORT void USB_Device_reset() -{ - env->CallStaticVoidMethod(cls_USB_Device, mid_USB_Dev_reset); -} - -EXPORT int USB_Device_getMaxPacketSize() -{ - return env->CallStaticIntMethod(cls_USB_Device, mid_USB_Dev_getMaxPacketSize); -} - -/* BDI 555 methods - * - * For documentation see the java doc. - */ -EXPORT void BDI555_break_() -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_break_); -} - -EXPORT void BDI555_go() -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_go); -} - -EXPORT void BDI555_reset_target() -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_reset_target); -} - -EXPORT BOOL BDI555_isFreezeAsserted() -{ - jboolean isAsserted; - isAsserted = env->CallStaticBooleanMethod(cls_BDI555, mid_BDI555_isFreezeAsserted); - return (isAsserted != JNI_FALSE); -} - -EXPORT void BDI555_startFastDownload(int startAddr) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_startFastDownload, startAddr); -} - -EXPORT void BDI555_fastDownload(int downloadData[], int dataLength) -{ - jintArray jdata; - jdata = env->NewIntArray(dataLength); - if (jdata == NULL) { - jclass excCls; - excCls = env->FindClass("java/lang/OutOfMemoryError"); - if (excCls == 0) { - return; - } - env->ThrowNew(excCls, "BDI555_fastDownload: not enough memory"); - return; - } -// TODO: check type cast - env->SetIntArrayRegion(jdata, 0, dataLength, (jint*) downloadData); - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_fastDownload, jdata, dataLength); - env->DeleteLocalRef(jdata); -} - -EXPORT void BDI555_stopFastDownload() -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_stopFastDownload); -} - -EXPORT void BDI555_writeMem(int addr, int value, int size) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeMem, addr, value, size); -} - -EXPORT int BDI555_readMem(int addr, int size) -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readMem, addr, size); -} - -EXPORT void BDI555_writeMemSeq(int value, int size) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeMemSeq, value, size); -} - -EXPORT int BDI555_readMemSeq(int size) -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readMemSeq, size); -} - -EXPORT int BDI555_readGPR(int gpr) -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readGPR, gpr); -} - -EXPORT void BDI555_writeGPR(int gpr, int value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeGPR, gpr, value); -} - -EXPORT int BDI555_readSPR(int spr) -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readSPR, spr); -} - -EXPORT void BDI555_writeSPR(int spr, int value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeSPR, spr, value); -} - -EXPORT int BDI555_readMSR() -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readMSR); -} - -EXPORT void BDI555_writeMSR(int value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeMSR, value); -} - -EXPORT long BDI555_readFPR(int fpr, int tmpMemAddr) -{ - return env->CallStaticLongMethod(cls_BDI555, mid_BDI555_readFPR, fpr, tmpMemAddr); -} - -EXPORT void BDI555_writeFPR(int fpr, int tmpMemAddr, long value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeSPR, fpr, tmpMemAddr, value); -} - -EXPORT int BDI555_readCR() -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readCR); -} - -EXPORT void BDI555_writeCR(int value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeCR, value); -} - -EXPORT int BDI555_readFPSCR() -{ - return env->CallStaticIntMethod(cls_BDI555, mid_BDI555_readFPSCR); -} - -EXPORT void BDI555_writeFPSCR(int value) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_writeFPSCR, value); -} - -EXPORT BOOL BDI555_isTargetInDebugMode() -{ - jboolean inDebugMode; - inDebugMode = env->CallStaticBooleanMethod(cls_BDI555, mid_BDI555_isTargetInDebugMode); - return (inDebugMode != JNI_FALSE); -} - -EXPORT void BDI555_setGpr31(int gpr31) -{ - env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_setGpr31, gpr31); -} - - -/* BDI 332 methods - * - * For documentation see the java doc. - */ -EXPORT void BDI332_nopsToLegalCmd() -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_nopsToLegalCmd); -} - -EXPORT void BDI332_break_() -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_break_); -} - -EXPORT void BDI332_go() -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_go); -} - -EXPORT void BDI332_reset_target() -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_reset_target); -} - -EXPORT void BDI332_reset_peripherals() -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_reset_peripherals); -} - -EXPORT BOOL BDI332_isFreezeAsserted() -{ - jboolean isAsserted; - isAsserted = env->CallStaticBooleanMethod(cls_BDI332, mid_BDI332_isFreezeAsserted); - return (isAsserted != JNI_FALSE); -} - -EXPORT void BDI332_fillMem(int downloadData[], int dataLength) -{ - jintArray jdata; - jdata = env->NewIntArray(dataLength); - if (jdata == NULL) { - jclass excCls; - excCls = env->FindClass("java/lang/OutOfMemoryError"); - if (excCls == 0) { - return; - } - env->ThrowNew(excCls, "BDI332_fillMem: not enough memory"); - return; - } -// for (int i = 0; i < dataLength; ++i) { -// fprintf_flush(stdout, ("data %d: %x\n", i, downloadData[i]); -// } - - env->SetIntArrayRegion(jdata, 0, dataLength, (jint*) downloadData); - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_fillMem, jdata, dataLength); - env->DeleteLocalRef(jdata); -} - -EXPORT int BDI332_dumpMem(int nofData, int result[]) -{ - jintArray intArray; - jsize size; - jint *intArrayElements; - intArray = (jintArray) env->CallStaticObjectMethod(cls_BDI332, mid_BDI332_dumpMem, nofData); - if (intArray == NULL) - return 0; - size = env->GetArrayLength(intArray); - intArrayElements = env->GetIntArrayElements(intArray, 0); - for (int i = 0; i < size; i++) { - result[i] = intArrayElements[i]; - } - env->ReleaseIntArrayElements(intArray, intArrayElements, 0); - return size; -} - -EXPORT void BDI332_writeMem(int addr, int value, int size) -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_writeMem, addr, value, size); -} - -EXPORT int BDI332_readMem(int addr, int size) -{ - return env->CallStaticIntMethod(cls_BDI332, mid_BDI332_readMem, addr, size); -} - -EXPORT int BDI332_readUserReg(int reg) -{ - return env->CallStaticIntMethod(cls_BDI332, mid_BDI332_readUserReg, reg); -} - -EXPORT void BDI332_writeUserReg(int reg, int value) -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_writeUserReg, reg, value); -} - -EXPORT int BDI332_readSysReg(int reg) -{ - return env->CallStaticIntMethod(cls_BDI332, mid_BDI332_readSysReg, reg); -} - -EXPORT void BDI332_writeSysReg(int reg, int value) -{ - env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_writeSysReg, reg, value); -} - -EXPORT BOOL BDI332_isTargetInDebugMode() -{ - jboolean isAsserted; - isAsserted = env->CallStaticBooleanMethod(cls_BDI332, mid_BDI332_isTargetInDebugMode); - return (isAsserted != JNI_FALSE); -} - -/* - * UART functions - * - * For documentation see the java doc. - */ -EXPORT int UART0_read(char result[]) -{ - jbyteArray byteArray; - jsize size; - jbyte *byteArrayElements; - byteArray = (jbyteArray) env->CallStaticObjectMethod(cls_Uart0, mid_Uart0_read); - if (byteArray == NULL) - return 0; - size = env->GetArrayLength(byteArray); - byteArrayElements = env->GetByteArrayElements(byteArray, 0); - for (int i = 0; i < size; i++) { - result[i] = byteArrayElements[i]; - } - env->ReleaseByteArrayElements(byteArray, byteArrayElements, 0); - return size; -} - -EXPORT int UART0_write(char data[], int dataLength) -{ - jbyteArray jdata; - jboolean result; - jdata = env->NewByteArray(dataLength); - if (jdata == NULL) { - jclass excCls; - excCls = env->FindClass("java/lang/OutOfMemoryError"); - if (excCls == 0) { - return FALSE; - } - env->ThrowNew(excCls, "UART0_write: not enough memory"); - return FALSE; - } - - env->SetByteArrayRegion(jdata, 0, dataLength, (jbyte*) data); - result = env->CallStaticBooleanMethod(cls_Uart0, mid_Uart0_write, jdata, dataLength); - env->DeleteLocalRef(jdata); - return result; -} diff --git a/JNIdll/libjvm.a b/JNIdll/libjvm.a deleted file mode 100644 index 14d00b6deaeb790f9e37f5097a2c18d971d31d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2226 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 diff --git a/blackbox/Usb/Mod/!Compile.otd b/blackbox/Usb/Mod/!Compile.otd deleted file mode 100644 index 8aafa6f..0000000 --- a/blackbox/Usb/Mod/!Compile.otd +++ /dev/null @@ -1,17 +0,0 @@ -¿¿CXdeCmdsDev.CompileThis - UsbBDIDll - UsbBDI - UsbBDI332 - UsbBDI555 - UsbTargLog - UsbUtils -¿¿E - -¿¿CDevDebug.UnloadThis - UsbTargLog - UsbBDI555 - UsbBDI332 - UsbBDI - UsbBDIDll - UsbUtils - ¿¿E diff --git a/blackbox/Usb/Mod/BDI.otd b/blackbox/Usb/Mod/BDI.otd deleted file mode 100644 index 7843bfe..0000000 --- a/blackbox/Usb/Mod/BDI.otd +++ /dev/null @@ -1,469 +0,0 @@ -MODULE UsbBDI; - IMPORT SYS := SYSTEM, BDI := UsbBDIDll, Log := StdLog, ComTools, WinApi, Services, TextModels, Ports, - Files, HostFiles; - - CONST - ttDefaultPeriod = 500; (*500 ms*) ttPipeHandDisconnected = -1; - nul = 0X; - ascLf = 0AX; ascCr = 0DX; - CONST - FALSE_ = 0; - PATH_LENGTH* = 512; - - CONST - JAVA_OUT_FILENAME = "JavaOut.txt"; - JAVA_ERR_FILENAME = "JavaErr.txt"; - INVALID_HANDLE_VALUE = -1; - STD_OUT_COLOR = Ports.green; - STD_ERR_COLOR = Ports.grey50; - JAVA_OUT_COLOR = Ports.blue; - JAVA_ERR_COLOR = Ports.red; - - CONST - MAX_UART_DATA_LENGTH* = BDI.MAX_UART_DATA_LENGTH; - - CONST - PATH_SEPARATOR = "\"; - ARG_SEPARATOR = ";"; - JAR_FILE_USB = "usb.jar"; - JAR_FILE_BDI = "usbpdi.jar"; - JAR_LOCATION = "Usb" + PATH_SEPARATOR + "Rsrc"; - - TYPE - StdReaderWriter = POINTER TO ABSTRACT RECORD (Services.Action) - stdIoText: TextModels.Model; stdIoTextPos: INTEGER; - time, endTime: LONGINT; period: INTEGER; - hStdOut, hStdErr: WinApi.HANDLE; - connected, running: BOOLEAN; prevChar: SHORTCHAR - END; - JvmReaderWriter = POINTER TO EXTENSIBLE RECORD (StdReaderWriter) - errText: TextModels.Model; stdIoWriter, stdErrWriter: TextModels.Writer; - hJavaOut, hJavaErr: WinApi.HANDLE; - END; - - - VAR - bool: BDI.BOOL; - Done-, deviceOpen, jvmCreated: BOOLEAN; (** previous operation successfully completed *) - readerWriter: JvmReaderWriter; - -(* ----------- Standard-IO / Java ReaderWriter --------------- *) - PROCEDURE (task: StdReaderWriter) Clear, NEW, EXTENSIBLE; - BEGIN - task.stdIoText := NIL; task.stdIoTextPos := 0; - task.hStdOut := ttPipeHandDisconnected; task.hStdErr := ttPipeHandDisconnected; - task.time := 0; task.endTime := 0; task.period := 0; - task.connected := FALSE; task.running := FALSE; - task.prevChar := nul; - END Clear; - - PROCEDURE (task: StdReaderWriter) Stop, NEW, EXTENSIBLE; - VAR done: WinApi.BOOL; - BEGIN - Services.RemoveAction(task); task.running := FALSE; - IF task.connected THEN - done := WinApi.CloseHandle(task.hStdOut); - done := WinApi.CloseHandle(task.hStdErr); - END; - task.Clear - END Stop; - - PROCEDURE (task: StdReaderWriter) SetTime (startFromNow, period, timeOut: INTEGER), NEW; - BEGIN - task.time := Services.Ticks() + startFromNow; - IF timeOut <= 0 THEN timeOut := MAX(INTEGER) END; - task.endTime := task.time + LONG(timeOut) * Services.resolution DIV 1000; - task.period := period - END SetTime; - - PROCEDURE (task: StdReaderWriter) ConnectStdOutPipe (hStdOut: WinApi.HANDLE), NEW; - VAR done: WinApi.BOOL; - BEGIN - IF task.connected & (task.hStdOut # hStdOut) THEN done := WinApi.CloseHandle(task.hStdOut) END; - task.hStdOut := hStdOut; task.connected := TRUE - END ConnectStdOutPipe; - - PROCEDURE (task: StdReaderWriter) ConnectStdErrPipe (hStdErr: WinApi.HANDLE), NEW; - VAR done: WinApi.BOOL; - BEGIN - IF task.connected & (task.hStdErr # hStdErr) THEN done := WinApi.CloseHandle(task.hStdErr) END; - task.hStdErr := hStdErr; task.connected := TRUE - END ConnectStdErrPipe; - - PROCEDURE (task: StdReaderWriter) Start, NEW, ABSTRACT; - - PROCEDURE NewJvmReaderWriter ( ): JvmReaderWriter; - VAR rec: JvmReaderWriter; - BEGIN - NEW(rec); rec.Clear; RETURN rec - END NewJvmReaderWriter; - - PROCEDURE (rec: JvmReaderWriter) Clear, EXTENSIBLE; - VAR done: WinApi.BOOL; - BEGIN - rec.Clear^; - rec.errText := NIL; rec.stdIoWriter := NIL; rec.stdErrWriter := NIL; - rec.hJavaOut := ttPipeHandDisconnected; rec.hJavaErr := ttPipeHandDisconnected; - END Clear; - - PROCEDURE (rec: JvmReaderWriter) Stop, EXTENSIBLE; - VAR done: WinApi.BOOL; - BEGIN - IF rec.connected THEN - rec.Stop^; done := WinApi.CloseHandle(rec.hJavaErr); done := WinApi.CloseHandle(rec.hJavaOut) - END; - rec.Clear - END Stop; - - PROCEDURE (rec: JvmReaderWriter) ConnectJavaOutPipe (hJavaOut: WinApi.HANDLE), NEW; - VAR done: WinApi.BOOL; - BEGIN - IF rec.connected & (rec.hJavaOut # hJavaOut) THEN done := WinApi.CloseHandle(rec.hJavaOut) END; - rec.hJavaOut := hJavaOut; rec.connected := TRUE - END ConnectJavaOutPipe; - - PROCEDURE (rec: JvmReaderWriter) ConnectJavaErrPipe (hJavaErr: WinApi.HANDLE), NEW; - VAR done: WinApi.BOOL; - BEGIN - IF rec.connected & (rec.hJavaErr # hJavaErr) THEN done := WinApi.CloseHandle(rec.hJavaErr) END; - rec.hJavaErr := hJavaErr; rec.connected := TRUE - END ConnectJavaErrPipe; - - PROCEDURE (rec: JvmReaderWriter) Start; - VAR handle, stdOutHandle, stdErrHandle: WinApi.HANDLE; - BEGIN - IF rec.running THEN rec.Stop END; - IF rec.stdIoText = NIL THEN rec.stdIoText := TextModels.dir.New(); END; - IF rec.stdIoWriter = NIL THEN rec.stdIoWriter := rec.stdIoText.NewWriter(NIL) END; - rec.stdIoWriter.SetPos(rec.stdIoTextPos); - - IF rec.errText = NIL THEN rec.errText := TextModels.dir.New(); END; - IF rec.stdErrWriter = NIL THEN rec.stdErrWriter := rec.errText.NewWriter(NIL) END; - rec.stdErrWriter.SetPos(rec.errText.Length()); - - (* Connect Std pipes *) - rec.ConnectStdOutPipe(BDI.getOutPipeHandle()); - rec.ConnectStdErrPipe(BDI.getErrPipeHandle()); - - (* Connect Java pipes *) - handle := WinApi.CreateFile(JAVA_OUT_FILENAME, WinApi.GENERIC_READ + WinApi.GENERIC_WRITE, - WinApi.FILE_SHARE_WRITE, NIL, WinApi.OPEN_EXISTING, {}, 0); - IF (handle = INVALID_HANDLE_VALUE) THEN - Log.String("Error opening JAVA_OUT_FILENAME"); Log.Ln; - ELSE - rec.ConnectJavaOutPipe(handle) - END; - - handle := WinApi.CreateFile(JAVA_ERR_FILENAME, WinApi.GENERIC_READ + WinApi.GENERIC_WRITE, - WinApi.FILE_SHARE_WRITE, NIL, WinApi.OPEN_EXISTING, {}, 0); - IF (handle = INVALID_HANDLE_VALUE) THEN - Log.String("Error opening JAVA_ERR_FILENAME"); Log.Ln; - ELSE - rec.ConnectJavaErrPipe(handle) - END; - - rec.running := TRUE; Services.DoLater(rec, rec.time) - END Start; - - PROCEDURE (rec: JvmReaderWriter) Do; - VAR - outModel: TextModels.Model; - n, ioDone, errDone, nofBytesRead, ioBytesAvail, errBytesAvail, exitCode: INTEGER; - ch: SHORTCHAR; - strSC: ARRAY 512 OF SHORTCHAR; - success: WinApi.BOOL; - BEGIN - IF rec.running THEN - (* STD OUT *) - IF rec.hStdOut > 0 THEN - nofBytesRead := 0; ioBytesAvail := 0; - ioDone := WinApi.PeekNamedPipe( - rec.hStdOut, (*//handle to pipe to copy from *) - SYS.ADR(strSC), (*//pointer to data buffer*) - LEN(strSC), (*//size, in bytes, of data buffer*) - nofBytesRead, (*nofBytesRead,*) (*//pointer to number of bytes read*) - ioBytesAvail, (*//pointer to total number of bytes available*) - NIL (*//pointer to unread bytes in this message*) - ); - IF (ioDone # 0) & (ioBytesAvail > 0) THEN - ioDone := WinApi.ReadFile(rec.hStdOut, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL); - IF (ioDone # 0) & (nofBytesRead > 0) THEN - FOR n := 0 TO nofBytesRead - 1 DO - ch := strSC[n]; - IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END; - rec.stdIoWriter.WriteChar(ch); - rec.prevChar := ch; - END - END; - rec.stdIoText.SetAttr(0, rec.stdIoText.Length(), - TextModels.NewColor(TextModels.dir.attr, STD_OUT_COLOR)); - Log.text.Append(rec.stdIoText) - END; - END; - (* STD ERR *) - IF rec.hStdErr > 0 THEN - nofBytesRead := 0; errBytesAvail := 0; - ioDone := WinApi.PeekNamedPipe( - rec.hStdErr, (*//handle to pipe to copy from *) - SYS.ADR(strSC), (*//pointer to data buffer*) - LEN(strSC), (*//size, in bytes, of data buffer*) - nofBytesRead, (*nofBytesRead,*) (*//pointer to number of bytes read*) - errBytesAvail, (*//pointer to total number of bytes available*) - NIL (*//pointer to unread bytes in this message*) - ); - IF (ioDone # 0) & (errBytesAvail > 0) THEN - errDone := WinApi.ReadFile(rec.hStdErr, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL); - IF (errDone # 0) & (nofBytesRead > 0) THEN - FOR n := 0 TO nofBytesRead - 1 DO - ch := strSC[n]; - IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END; - rec.stdErrWriter.WriteChar(ch); rec.prevChar := ch - END - END; - rec.errText.SetAttr(0, rec.errText.Length(), - TextModels.NewColor(TextModels.dir.attr, STD_ERR_COLOR)); - Log.text.Append(rec.errText) - END - END; - (* JAVA OUT *) - IF rec.hJavaOut > 0 THEN - ioDone := WinApi.ReadFile(rec.hJavaOut, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL); - IF (ioDone # 0) & (nofBytesRead > 0) THEN - FOR n := 0 TO nofBytesRead - 1 DO - ch := strSC[n]; - IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END; - rec.stdIoWriter.WriteChar(ch); - rec.prevChar := ch; - END - END; - rec.stdIoText.SetAttr(0, rec.stdIoText.Length(), - TextModels.NewColor(TextModels.dir.attr, JAVA_OUT_COLOR)); - Log.text.Append(rec.stdIoText) - END; - (* JAVA ERR *) - IF rec.hJavaErr > 0 THEN - errDone := WinApi.ReadFile(rec.hJavaErr, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL); - IF (errDone # 0) & (nofBytesRead > 0) THEN - FOR n := 0 TO nofBytesRead - 1 DO - ch := strSC[n]; - IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END; - rec.stdErrWriter.WriteChar(ch); rec.prevChar := ch - END - END; - rec.errText.SetAttr(0, rec.errText.Length(), - TextModels.NewColor(TextModels.dir.attr, JAVA_ERR_COLOR)); - Log.text.Append(rec.errText) - END; - INC( rec.time, rec.period ); Services.DoLater(rec, rec.time ) - END; - END Do; - -(* ----------- JVM --------------- *) - - PROCEDURE CreateJVM (classpath: ARRAY OF SHORTCHAR); - VAR string: WinApi.PtrSTR; - BEGIN - string := ComTools.NewSString(classpath); - bool := BDI.createJVM(string); - IF bool = FALSE_ THEN - Done := FALSE; - Log.String("creating JVM failed"); Log.Ln; - HALT(77); - ELSE - Done := TRUE; - Log.String("JVM successfully created"); Log.Ln; - jvmCreated := TRUE; - END; - (* We need to create the jvm before opening the ReaderWriter. - The javaout, javaerr can only be opened after creating the jvm! *) - IF readerWriter = NIL THEN - readerWriter := NewJvmReaderWriter(); - readerWriter.Start(); - END; - ComTools.FreeSString(string); - END CreateJVM; - - PROCEDURE DestroyJVM ; - BEGIN - bool := BDI.destroyJVM(); - IF bool = FALSE_ THEN - Done := FALSE; - Log.String("destroying JVM failed"); Log.Ln; - ELSE - Done := TRUE; - Log.String("JVM destroyed"); Log.Ln; - END; - jvmCreated := FALSE; - END DestroyJVM; - - PROCEDURE CheckForExceptions * (): BOOLEAN; - BEGIN - RETURN (BDI.checkForExceptions() # FALSE_) - END CheckForExceptions; - -(* ----------- USB --------------- *) - - PROCEDURE USB_Device_open ; - BEGIN - BDI.USB_Device_open; - Done := ~CheckForExceptions(); - IF Done THEN - deviceOpen := TRUE; - END - END USB_Device_open; - - PROCEDURE USB_Device_close ; - BEGIN - BDI.USB_Device_close; - Done := ~CheckForExceptions(); - deviceOpen := FALSE; - END USB_Device_close; - - PROCEDURE USB_Device_reset * ; - BEGIN - BDI.USB_Device_reset; - Done := ~CheckForExceptions(); - deviceOpen := FALSE; - END USB_Device_reset; - - PROCEDURE USB_Device_getMaxPacketSize * (): INTEGER; - VAR val: INTEGER; - BEGIN - IF deviceOpen THEN - Done := TRUE; - RETURN BDI.USB_Device_getMaxPacketSize(); - ELSE - Done := FALSE; - RETURN - 1 - END - END USB_Device_getMaxPacketSize; - -(* --------- UART0 ----------------- *) - - PROCEDURE UART0_read * (VAR data: ARRAY OF SHORTCHAR; VAR length: INTEGER): BOOLEAN; - BEGIN - length := BDI.UART0_read(data); - RETURN length # FALSE_; - END UART0_read; - - PROCEDURE UART0_write * (VAR data: ARRAY OF SHORTCHAR; length: INTEGER): BOOLEAN; - VAR - result: INTEGER; - BEGIN - RETURN BDI.UART0_write(SYS.ADR(data[0]), length) # FALSE_; - END UART0_write; - -(* -------------- Helper Functions ------------------*) - - PROCEDURE GetUserStartUpPath (VAR startupPath: ARRAY OF SHORTCHAR); - VAR - userStartUpLocator: Files.Locator; userStartUpHostLoc: HostFiles.Locator; - startupPathChar: ARRAY PATH_LENGTH OF CHAR; - i: INTEGER; - BEGIN - userStartUpLocator := Files.dir.This(""); userStartUpHostLoc := userStartUpLocator(HostFiles.Locator); - startupPathChar := userStartUpHostLoc.path$; - FOR i := 0 TO LEN(startupPathChar) - 1 DO - startupPath[i] := SYS.VAL(SHORTCHAR, startupPathChar[i]); - END - END GetUserStartUpPath; - - PROCEDURE GetSystemStartUpPath (VAR startupPath: ARRAY OF SHORTCHAR); - VAR - cmdLinePtr: WinApi.PtrWSTR; args: WinApi.RetCommandLineToArgvW; - n, i, nofArgs: INTEGER; - sysStartUpLocator: Files.Locator; sysStartUpHostLoc: HostFiles.Locator; - BEGIN - cmdLinePtr := WinApi.GetCommandLineW(); - args := WinApi.CommandLineToArgvW(cmdLinePtr, nofArgs); - - n := LEN(args[0]$); - REPEAT DEC(n) UNTIL (args[0][n] = PATH_SEPARATOR) OR (n <= 0); args[0][n] := nul; - - sysStartUpLocator := HostFiles.NewLocator(args[0]$); args[0][n] := PATH_SEPARATOR; - sysStartUpHostLoc := sysStartUpLocator(HostFiles.Locator); - FOR i := 0 TO LEN(sysStartUpHostLoc.path$) DO - startupPath[i] := SYS.VAL(SHORTCHAR, sysStartUpHostLoc.path[i]); - END; - END GetSystemStartUpPath; - - PROCEDURE CheckIfFileExists (filePath: ARRAY OF CHAR; fileName: ARRAY OF CHAR): BOOLEAN; - VAR - i: INTEGER; done: BOOLEAN; - loc: Files.Locator; file: Files.File; name: Files.Name; - BEGIN - loc := Files.dir.This(filePath); - IF loc.res # 0 THEN (*RETURN FALSE*) END; - FOR i := 0 TO LEN(fileName$) DO - name[i] := fileName[i]; - END; - file := Files.dir.Old(loc, name, Files.shared); - RETURN loc.res = 0 - END CheckIfFileExists; - - PROCEDURE ConnectDevice * ; - VAR - startupPath: ARRAY PATH_LENGTH OF SHORTCHAR; - BEGIN - IF ~deviceOpen THEN - IF ~jvmCreated THEN - (* Check for existence of jar-file (whether in user of system directory) *) - GetUserStartUpPath(startupPath); - IF ~CheckIfFileExists(startupPath + PATH_SEPARATOR + JAR_LOCATION, JAR_FILE_USB) OR - ~CheckIfFileExists(startupPath + PATH_SEPARATOR + JAR_LOCATION, JAR_FILE_BDI) THEN - GetSystemStartUpPath(startupPath); - IF ~CheckIfFileExists(startupPath + PATH_SEPARATOR + JAR_LOCATION, JAR_FILE_USB) OR - ~CheckIfFileExists(startupPath + PATH_SEPARATOR + JAR_LOCATION, JAR_FILE_BDI) THEN - Log.String(JAR_FILE_USB + " or " + JAR_FILE_BDI + - " not found in user or system path; expected in " + JAR_LOCATION); Log.Ln; - HALT(76); - END - END; - Log.String("Startup Path: " + startupPath); Log.Ln; - CreateJVM(startupPath + PATH_SEPARATOR + JAR_LOCATION + PATH_SEPARATOR + JAR_FILE_USB + - ARG_SEPARATOR + startupPath + PATH_SEPARATOR + JAR_LOCATION + PATH_SEPARATOR + - JAR_FILE_BDI); - (* - CreateJVM("D:\work\USB\eclipse\mcdp\jars\usb.jar;D:\work\USB\eclipse\mcdp\jars\usbpdi.jar"); - *) - IF ~Done THEN HALT(78) END; - jvmCreated := TRUE; - END; - USB_Device_open; - IF ~Done THEN HALT(79) END; - deviceOpen := TRUE; - END - END ConnectDevice; - - PROCEDURE DeviceOpen * (): BOOLEAN ; - BEGIN - RETURN deviceOpen - END DeviceOpen; - - (* Close and reopen the device *) - PROCEDURE ReopenDevice * ; - BEGIN - ConnectDevice; - USB_Device_close; - USB_Device_open; - IF Done THEN - Log.String("Device opened successfully"); Log.Ln; - ELSE - Log.String("Error while opening Device"); Log.Ln; - END - END ReopenDevice; - -BEGIN - deviceOpen := FALSE; - jvmCreated := FALSE; -CLOSE - IF readerWriter # NIL THEN - readerWriter.Stop; - END; - IF deviceOpen THEN - USB_Device_close; - END; - IF jvmCreated THEN - DestroyJVM - END -END UsbBDI. diff --git a/blackbox/Usb/Mod/BDI332.otd b/blackbox/Usb/Mod/BDI332.otd deleted file mode 100644 index c4c4744..0000000 --- a/blackbox/Usb/Mod/BDI332.otd +++ /dev/null @@ -1,109 +0,0 @@ -MODULE UsbBDI332; - IMPORT SYS := SYSTEM, BDI := UsbBDIDll, BDIMain := UsbBDI, WinApi; - - CONST - FALSE_ = 0; - - VAR - Done-: BOOLEAN; - - (* --------- 332 ----------------- *) - - PROCEDURE nopsToLegalCmd * ; - BEGIN - BDI.BDI332_nopsToLegalCmd; - Done := ~BDIMain.CheckForExceptions() - END nopsToLegalCmd; - - PROCEDURE go * ; - BEGIN - BDI.BDI332_go; - Done := ~BDIMain.CheckForExceptions() - END go; - - PROCEDURE break_ * ; - BEGIN - BDI.BDI332_break_; - Done := ~BDIMain.CheckForExceptions() - END break_; - - PROCEDURE reset_target * ; - BEGIN - BDI.BDI332_reset_target; - Done := ~BDIMain.CheckForExceptions() - END reset_target; - - PROCEDURE reset_peripherals * ; - BEGIN - BDI.BDI332_reset_peripherals; - Done := ~BDIMain.CheckForExceptions() - END reset_peripherals; - - PROCEDURE isFreezeAsserted * (): BOOLEAN; - VAR result: WinApi.BOOL; - BEGIN - result := BDI.BDI332_isFreezeAsserted(); - Done := ~BDIMain.CheckForExceptions(); - RETURN result # FALSE_ - END isFreezeAsserted; - - PROCEDURE fillMem * (downloadData: ARRAY OF INTEGER; dataLength: INTEGER); - BEGIN - BDI.BDI332_fillMem(SYS.ADR(downloadData[0]), dataLength); - Done := ~BDIMain.CheckForExceptions() - END fillMem; - - PROCEDURE dumpMem * (nofData: INTEGER; VAR result: ARRAY OF INTEGER; VAR length: INTEGER); - BEGIN - length := BDI.BDI332_dumpMem(nofData, result); - Done := ~BDIMain.CheckForExceptions() - END dumpMem; - - PROCEDURE writeMem * (addr, value, size: INTEGER); - BEGIN - BDI.BDI332_writeMem(addr, value, size); - Done := ~BDIMain.CheckForExceptions() - END writeMem; - - PROCEDURE readMem * (addr, size: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI332_readMem(addr, size); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readMem; - - PROCEDURE readUserReg * (reg: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI332_readUserReg(reg); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readUserReg; - - PROCEDURE writeUserReg * (reg, value: INTEGER); - BEGIN - BDI.BDI332_writeUserReg(reg, value); - Done := ~BDIMain.CheckForExceptions() - END writeUserReg; - - PROCEDURE readSysReg * (reg: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI332_readSysReg(reg); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readSysReg; - - PROCEDURE writeSysReg * (reg, value: INTEGER); - BEGIN - BDI.BDI332_writeSysReg(reg, value); - Done := ~BDIMain.CheckForExceptions() - END writeSysReg; - - PROCEDURE isTargetInDebugMode * (): BOOLEAN; - BEGIN - RETURN BDI.BDI332_isTargetInDebugMode() # FALSE_; - END isTargetInDebugMode; - -END UsbBDI332. \ No newline at end of file diff --git a/blackbox/Usb/Mod/BDI555.otd b/blackbox/Usb/Mod/BDI555.otd deleted file mode 100644 index fcd8205..0000000 --- a/blackbox/Usb/Mod/BDI555.otd +++ /dev/null @@ -1,189 +0,0 @@ -MODULE UsbBDI555; - IMPORT SYS := SYSTEM, BDI := UsbBDIDll, BDIMain := UsbBDI, WinApi; - - CONST - FALSE_ = 0; - - CONST - MAX_NOF_LONGS_FILL* = BDI.MAX_NOF_LONGS_FILL; - - VAR - Done-: BOOLEAN; - -(* ----------- 555 --------------- *) - - PROCEDURE go * ; - BEGIN - BDI.BDI555_go; - Done := ~BDIMain.CheckForExceptions() - END go; - - PROCEDURE break_ * ; - BEGIN - BDI.BDI555_break_; - Done := ~BDIMain.CheckForExceptions() - END break_; - - PROCEDURE reset_target * ; - BEGIN - BDI.BDI555_reset_target; - Done := ~BDIMain.CheckForExceptions() - END reset_target; - - PROCEDURE isFreezeAsserted * (): BOOLEAN; - VAR result: WinApi.BOOL; - BEGIN - result := BDI.BDI555_isFreezeAsserted(); - Done := ~BDIMain.CheckForExceptions(); - RETURN result # FALSE_ - END isFreezeAsserted; - - PROCEDURE startFastDownload * (addr: INTEGER); - BEGIN - BDI.BDI555_startFastDownload(addr); - Done := ~BDIMain.CheckForExceptions() - END startFastDownload; - - PROCEDURE fastDownload * (downloadData: ARRAY OF INTEGER; dataLength: INTEGER); - (*VAR i: INTEGER;*) - BEGIN - (* - Log.String("BDI555_fastDownload: length = "); Log.Int(dataLength); Log.Ln; - FOR i := 0 TO dataLength - 1 DO - Log.Int(downloadData[i]); Log.Tab; - END; - Log.Ln; - *) - BDI.BDI555_fastDownload(SYS.ADR(downloadData[0]), dataLength); - Done := ~BDIMain.CheckForExceptions() - END fastDownload; - - PROCEDURE stopFastDownload * ; - BEGIN - BDI.BDI555_stopFastDownload; - Done := ~BDIMain.CheckForExceptions() - END stopFastDownload; - - PROCEDURE writeMem * (addr, value, size: INTEGER); - BEGIN - BDI.BDI555_writeMem(addr, value, size); - Done := ~BDIMain.CheckForExceptions() - END writeMem; - - PROCEDURE readMem * (addr, size: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readMem(addr, size); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readMem; - - PROCEDURE writeMemSeq * (value, size: INTEGER); - BEGIN - BDI.BDI555_writeMemSeq(value, size); - Done := ~BDIMain.CheckForExceptions() - END writeMemSeq; - - PROCEDURE readMemSeq * (size: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readMemSeq(size); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readMemSeq; - - PROCEDURE readGPR * (gpr: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readGPR(gpr); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readGPR; - - PROCEDURE writeGPR * (gpr, value: INTEGER); - BEGIN - BDI.BDI555_writeGPR(gpr, value); - Done := ~BDIMain.CheckForExceptions() - END writeGPR; - - PROCEDURE readSPR * (spr: INTEGER): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readSPR(spr); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readSPR; - - PROCEDURE writeSPR * (spr, value: INTEGER); - BEGIN - BDI.BDI555_writeSPR(spr, value); - Done := ~BDIMain.CheckForExceptions() - END writeSPR; - - PROCEDURE readMSR * (): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readMSR(); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readMSR; - - PROCEDURE writeMSR * (value: INTEGER); - BEGIN - BDI.BDI555_writeMSR(value); - Done := ~BDIMain.CheckForExceptions() - END writeMSR; - - PROCEDURE readFPR * (fpr, tmpMemAddr: INTEGER): LONGINT; - VAR result: LONGINT; - BEGIN - result := BDI.BDI555_readFPR(fpr, tmpMemAddr); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readFPR; - - PROCEDURE writeFPR * (fpr, tmpMemAddr: INTEGER; value: LONGINT); - BEGIN - BDI.BDI555_writeFPR(fpr, tmpMemAddr, value); - Done := ~BDIMain.CheckForExceptions() - END writeFPR; - - PROCEDURE readCR * (): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readCR(); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readCR; - - PROCEDURE writeCR * (value: INTEGER); - BEGIN - BDI.BDI555_writeCR(value); - Done := ~BDIMain.CheckForExceptions() - END writeCR; - - PROCEDURE readFPSCR * (): INTEGER; - VAR result: INTEGER; - BEGIN - result := BDI.BDI555_readFPSCR(); - Done := ~BDIMain.CheckForExceptions(); - RETURN result - END readFPSCR; - - PROCEDURE writeFPSCR * (value: INTEGER); - BEGIN - BDI.BDI555_writeFPSCR(value); - Done := ~BDIMain.CheckForExceptions() - END writeFPSCR; - - PROCEDURE isTargetInDebugMode * (): BOOLEAN; - BEGIN - RETURN BDI.BDI555_isTargetInDebugMode() # FALSE_; - END isTargetInDebugMode; - - PROCEDURE setGpr31 * (gpr31: INTEGER); - BEGIN - BDI.BDI555_setGpr31(gpr31); - END setGpr31; - -END UsbBDI555. \ No newline at end of file diff --git a/blackbox/Usb/Mod/BDIDll.otd b/blackbox/Usb/Mod/BDIDll.otd deleted file mode 100644 index efbb8a4..0000000 --- a/blackbox/Usb/Mod/BDIDll.otd +++ /dev/null @@ -1,178 +0,0 @@ -MODULE UsbBDIDll ["BDI.dll"]; - IMPORT SYSTEM; - - CONST - MAX_NOF_LONGS_FILL* = 84; - MAX_UART_DATA_LENGTH* = 256; - - TYPE - PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR; - BOOL* = INTEGER; - -(* -------JVM--------- *) - - PROCEDURE getErrPipeHandle* (): INTEGER; - (*END getErrPipeHandle; *) - - PROCEDURE getOutPipeHandle* (): INTEGER; - (*END getOutPipeHandle; *) - - PROCEDURE createJVM* (classpath: PtrSTR): BOOL; - (*END createJVM; *) - - PROCEDURE destroyJVM* (): INTEGER; - (*END destroyJVM; *) - - PROCEDURE checkForExceptions* (): BOOL; - (*END checkForExceptions; *) - -(* -------USB--------- *) - - PROCEDURE USB_Device_open*; - (*END USB_Device_open; *) - - PROCEDURE USB_Device_close*; - (*END USB_Device_close; *) - - PROCEDURE USB_Device_reset*; - (*END USB_Device_reset; *) - - PROCEDURE USB_Device_getMaxPacketSize* (): INTEGER; - (*END USB_Device_reset; *) - -(* -------555--------- *) - - PROCEDURE BDI555_go*; - (*END BDI555_go; *) - - PROCEDURE BDI555_break_*; - (*END BDI555_break_; *) - - PROCEDURE BDI555_reset_target*; - (*END BDI555_reset_target; *) - - PROCEDURE BDI555_isFreezeAsserted* (): BOOL; - (*END BDI555_isFreezeAsserted; *) - - PROCEDURE BDI555_startFastDownload* (adr: INTEGER); - (*END BDI555_startFastDownload; *) - - PROCEDURE BDI555_fastDownload* (downloadData: (* ARRAY OF *) INTEGER; dataLength: INTEGER); - (*END BDI555_fastDownload; *) - - PROCEDURE BDI555_stopFastDownload*; - (*END BDI555_stopFastDownload; *) - - PROCEDURE BDI555_writeMem* (addr, value, size: INTEGER); - (*END BDI555_writeMem; *) - - PROCEDURE BDI555_readMem* (addr, size: INTEGER): INTEGER; - (*END BDI555_readMem; *) - - PROCEDURE BDI555_writeMemSeq* (value, size: INTEGER); - (*END BDI555_writeMemSeq; *) - - PROCEDURE BDI555_readMemSeq* (size: INTEGER): INTEGER; - (*END BDI555_readMemSeq; *) - - PROCEDURE BDI555_readGPR* (gpr: INTEGER): INTEGER; - (*END BDI555_readGPR; *) - - PROCEDURE BDI555_writeGPR* (gpr, value: INTEGER); - (*END BDI555_writeGPR; *) - - PROCEDURE BDI555_readSPR* (spr: INTEGER): INTEGER; - (*END BDI555_readSPR; *) - - PROCEDURE BDI555_writeSPR* (spr, value: INTEGER); - (*END BDI555_writeSPR; *) - - PROCEDURE BDI555_readMSR* (): INTEGER; - (*END BDI555_readMSR; *) - - PROCEDURE BDI555_writeMSR* (value: INTEGER); - (*END BDI555_writeMSR; *) - - PROCEDURE BDI555_readFPR* (fpr, tmpMemAddr: INTEGER): LONGINT; - (*END BDI555_readFPR; *) - - PROCEDURE BDI555_writeFPR* (fpr, tmpMemAddr: INTEGER; value: LONGINT); - (*END BDI555_writeFPR; *) - - PROCEDURE BDI555_readCR* (): INTEGER; - (*END BDI555_readCR; *) - - PROCEDURE BDI555_writeCR* (value: INTEGER); - (*END BDI555_writeCR; *) - - PROCEDURE BDI555_readFPSCR* (): INTEGER; - (*END BDI555_readFPSCR; *) - - PROCEDURE BDI555_writeFPSCR* (value: INTEGER); - (*END BDI555_writeFPSCR; *) - - PROCEDURE BDI555_isTargetInDebugMode* (): BOOL; - (*END BDI555_isTargetInDebugMode; *) - - PROCEDURE BDI555_setGpr31* (gpr31: INTEGER); - (*END BDI555_setGpr31; *) - -(* -------332--------- *) - - PROCEDURE BDI332_nopsToLegalCmd*; - (*END BDI332_nopsToLegalCmd; *) - - PROCEDURE BDI332_go*; - (*END BDI332_go; *) - - PROCEDURE BDI332_break_*; - (*END BDI332_break_; *) - - PROCEDURE BDI332_reset_target*; - (*END BDI332_reset_target; *) - - PROCEDURE BDI332_reset_peripherals*; - (*END BDI332_reset_peripherals; *) - - PROCEDURE BDI332_isFreezeAsserted* (): BOOL; - (*END BDI332_isFreezeAsserted; *) - - PROCEDURE BDI332_fillMem* (downloadData: (* ARRAY OF *) INTEGER; dataLength: INTEGER); - (*END BDI332_fillMem; *) - - PROCEDURE BDI332_dumpMem* (nofData: INTEGER; VAR result: ARRAY OF INTEGER): INTEGER; -(* - PROCEDURE BDI332_dumpMem* (nofData: INTEGER; VAR result: ARRAY [untagged] MAX_NOF_LONGS_FILL OF INTEGER): INTEGER; -*) - (*END BDI332_dumpMem; *) - - PROCEDURE BDI332_writeMem* (addr, value, size: INTEGER); - (*END BDI332_writeMem; *) - - PROCEDURE BDI332_readMem* (addr, size: INTEGER): INTEGER; - (*END BDI332_readMem; *) - - PROCEDURE BDI332_readUserReg* (reg: INTEGER): INTEGER; - (*END BDI332_readUserReg; *) - - PROCEDURE BDI332_writeUserReg* (reg, value: INTEGER); - (*END BDI332_writeUserReg; *) - - PROCEDURE BDI332_readSysReg* (reg: INTEGER): INTEGER; - (*END BDI332_readSysReg; *) - - PROCEDURE BDI332_writeSysReg* (reg, value: INTEGER); - (*END BDI332_writeSysReg; *) - - PROCEDURE BDI332_isTargetInDebugMode* (): BOOL; - (*END BDI332_isTargetInDebugMode; *) - -(* ------ UART0 ------ *) - - PROCEDURE UART0_read* (VAR data: ARRAY [untagged] OF SHORTCHAR): INTEGER; - (*END UART0_read; *) - - PROCEDURE UART0_write* (data: (* ARRAY OF SHORTCHAR *) INTEGER; length: INTEGER): BOOL; - (*END UART0_write; *) - -END UsbBDIDll. diff --git a/blackbox/Usb/Mod/TargLog.otd b/blackbox/Usb/Mod/TargLog.otd deleted file mode 100644 index b96d9d8..0000000 --- a/blackbox/Usb/Mod/TargLog.otd +++ /dev/null @@ -1,111 +0,0 @@ - -MODULE UsbTargLog; -(** © NTB/AS 12.01.2006 *) -(** - Changes: -*) - IMPORT - USB := UsbBDI, Log := StdLog, Services, TextModels, XUT := XdeUtilities; - - CONST - logTitle = "USB Target Log"; - PERIOD = 500; - - TYPE - Receiver = POINTER TO RECORD (Services.Action) - time: LONGINT; period: INTEGER - END; - - VAR - receiver: Receiver; - logTextModel: TextModels.Model; logWriter: TextModels.Writer; - - PROCEDURE (receiver: Receiver) Do; - VAR - length, i: INTEGER; done: BOOLEAN; - data: ARRAY USB.MAX_UART_DATA_LENGTH OF SHORTCHAR; - BEGIN - done := USB.UART0_read(data, length); - IF done THEN - length := MIN(length, USB.MAX_UART_DATA_LENGTH ); - FOR i := 0 TO length - 1 DO - logWriter.WriteChar(data[i]) - END - END; - INC( receiver.time, receiver.period ); Services.DoLater(receiver, receiver.time ) - END Do; - - PROCEDURE Stop * ; - BEGIN - IF receiver # NIL THEN Services.RemoveAction(receiver ); receiver := NIL END; - logWriter := NIL; logTextModel := NIL - END Stop; - - PROCEDURE StartReceiver; - BEGIN - IF receiver # NIL THEN Services.RemoveAction(receiver ); receiver := NIL END; - NEW(receiver); - receiver.time := Services.Ticks(); receiver.period := PERIOD; - Services.DoLater(receiver, receiver.time) - END StartReceiver; - - PROCEDURE Start * ; - VAR beg, end: INTEGER; - BEGIN - IF ~USB.DeviceOpen() THEN - USB.ConnectDevice; - END; - Stop; - Log.String("opening USB target log"); Log.Ln; - XUT.GetTextModel("", logTextModel, beg, end); logWriter := logTextModel.NewWriter(NIL); - XUT.ShowTextView(logTextModel, logTitle); - StartReceiver; - END Start; - - PROCEDURE SendSelToTarget * ; - (** send all visible char of the current selection to the target - *) - VAR - reader: TextModels.Reader; textModel: TextModels.Model; beg, end, currentLen: INTEGER; ch: CHAR; - data: ARRAY USB.MAX_UART_DATA_LENGTH OF SHORTCHAR; done, error: BOOLEAN; - BEGIN - XUT.GetTextModel("@", textModel, beg, end); - IF textModel # NIL THEN - reader := textModel.NewReader(NIL); reader.SetPos(beg); - currentLen := 0; error := FALSE; - WHILE reader.Pos() < end DO - reader.ReadChar(ch); - data[currentLen] := SHORT(ch); - INC(currentLen); - IF currentLen >= USB.MAX_UART_DATA_LENGTH THEN - done := USB.UART0_write(data, currentLen); - IF ~done THEN - error := TRUE; - Log.String("Sending data failed"); Log.Ln; - END; - currentLen := 0; - END - END; - IF currentLen > 0 THEN - done := USB.UART0_write(data, currentLen); - IF ~done THEN - error := TRUE; - Log.String("Sending data failed"); Log.Ln; - END - END; - IF ~error THEN - Log.String("Data sent successfully"); Log.Ln; - END - END - END SendSelToTarget; - - PROCEDURE ClearText * ; - BEGIN - IF logTextModel # NIL THEN - logTextModel.Delete(0, logTextModel.Length()); logWriter.SetPos(0) - END - END ClearText; - -CLOSE - Stop -END UsbTargLog . diff --git a/blackbox/Usb/Mod/Utils.otd b/blackbox/Usb/Mod/Utils.otd deleted file mode 100644 index b6ed49e..0000000 --- a/blackbox/Usb/Mod/Utils.otd +++ /dev/null @@ -1,130 +0,0 @@ -MODULE UsbUtils; -IMPORT SYSTEM, WinApi, Strings, ComTools, Log := StdLog; - - CONST - HK_LM_JRE_Key = "SOFTWARE\javaSoft\Java Runtime Environment"; - HK_LM_JRE_CurrentVersion_value = "CurrentVersion"; - HK_LM_JRE_JavaHome_value = "JavaHome"; - HK_LM_PATH_Key = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; - HK_CU_PATH_Key = "Environment"; - PATH_value = "PATH"; - - PROCEDURE RegLMQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR; - OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN; - VAR - res, length: INTEGER; hKey: WinApi.HKEY; - BEGIN - qValue := ""; - res := WinApi.RegOpenKeyEx(WinApi.HKEY_LOCAL_MACHINE, - subKey, 0, WinApi.KEY_QUERY_VALUE, hKey); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - ELSE - length := LEN(qValue); - res := WinApi.RegQueryValueEx(hKey, valueName, NIL, NIL, qValue[0], length); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - END - END; - res := WinApi.RegCloseKey(hKey); - RETURN TRUE; - END RegLMQuery; - - PROCEDURE RegCUQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR; - OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN; - VAR - res, length: INTEGER; hKey: WinApi.HKEY; - BEGIN - qValue := ""; - res := WinApi.RegOpenKeyEx(WinApi.HKEY_CURRENT_USER, - subKey, 0, WinApi.KEY_QUERY_VALUE, hKey); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - ELSE - length := LEN(qValue); - res := WinApi.RegQueryValueEx(hKey, valueName, NIL, NIL, qValue[0], length); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - END - END; - res := WinApi.RegCloseKey(hKey); - RETURN TRUE; - END RegCUQuery; - - PROCEDURE RegCUCreateKeyAndSetValue* (IN subKey, valueName: ARRAY OF SHORTCHAR; - newValue: ARRAY OF SHORTCHAR): BOOLEAN; - VAR - res, length, lpdwDisposition: INTEGER; hKey: WinApi.HKEY; - BEGIN - res := WinApi.RegCreateKeyEx(WinApi.HKEY_CURRENT_USER, subKey, 0, NIL, - WinApi.REG_OPTION_NON_VOLATILE, WinApi.KEY_ALL_ACCESS, NIL, hKey, lpdwDisposition); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - END; - res := WinApi.RegSetValueEx(hKey, valueName, 0, WinApi.REG_SZ, - newValue[0], LEN(newValue$)); - IF res # WinApi.ERROR_SUCCESS THEN - RETURN FALSE - END; - res := WinApi.RegCloseKey(hKey); - RETURN TRUE - END RegCUCreateKeyAndSetValue; - - PROCEDURE CheckAndSetPath*; - CONST - PATH_Pattern = "\bin\client"; - - SMTO_ABORTIFHUNG = {1} (* 2 in C *); - HWND_BROADCAST = 0FFFFH; - - VAR - jreHome, regValue, tmpRegValue: ARRAY 2048 OF SHORTCHAR; - pos, result: INTEGER; noUserPathValue, success, found: BOOLEAN; - environment: WinApi.PtrSTR; - BEGIN - (* get jre home path *) - IF ~RegLMQuery(HK_LM_JRE_Key, HK_LM_JRE_CurrentVersion_value, tmpRegValue) (* e.g. "1.5" *) THEN - Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "! Is Java installed?"); Log.Ln; RETURN - END; - IF ~RegLMQuery(HK_LM_JRE_Key + "\" + tmpRegValue, HK_LM_JRE_JavaHome_value, jreHome) THEN - Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "\" + tmpRegValue + "! Is Java installed?"); Log.Ln; RETURN - END; - (* look for %javahome%\bin\client on system and user path*) - regValue := jreHome + PATH_Pattern; - found := RegLMQuery(HK_LM_PATH_Key, "Path", tmpRegValue); - Strings.Find(LONG(tmpRegValue), LONG(regValue), 0, pos); - found := pos >= 0; - IF found THEN - Log.String("the PATH system variable " + regValue + " is already set"); Log.Ln; - RETURN - END; - tmpRegValue := ""; - noUserPathValue := ~RegCUQuery(HK_CU_PATH_Key, PATH_value, tmpRegValue); - Strings.Find(LONG(tmpRegValue), PATH_Pattern, 0, pos); - found := pos >= 0; - IF ~found THEN (* insert registry key into user PATH variable *) - IF tmpRegValue = "" THEN - tmpRegValue := regValue; - ELSE - tmpRegValue := tmpRegValue + ";" + regValue - END; - IF RegCUCreateKeyAndSetValue(HK_CU_PATH_Key, PATH_value, tmpRegValue) THEN - IF noUserPathValue THEN (* create user PATH value first *) - Log.String("user value PATH created"); Log.Ln; - END; - Log.String(regValue + " added to user PATH"); Log.Ln; - ELSE - Log.String("UsbUtils: Error on CreateKey with value " + tmpRegValue); Log.Ln; - END; - (* Notify windows about Environment Change (if this is not done, the changes will only take effect after reboot) *) - Log.String("Updating Environment - this may take some seconds..."); Log.Ln; - environment := ComTools.NewSString("Environment"); - result := WinApi.SendMessageTimeout(HWND_BROADCAST, WinApi.WM_SETTINGCHANGE, 0, - SYSTEM.VAL(INTEGER, environment), SMTO_ABORTIFHUNG, 2000, result); - Log.String("Please restart Blackbox"); Log.Ln; - ELSE - Log.String("the PATH user variable " + regValue + " is already set"); Log.Ln; - END - END CheckAndSetPath; - -END UsbUtils. \ No newline at end of file diff --git a/blackbox/Usb/Rsrc/usb.jar b/blackbox/Usb/Rsrc/usb.jar deleted file mode 100644 index b8b19d1673665da915c5c8cd4c43248bf40f1fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17289 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

!)XkGsP>6Td=VPXWI6a4)(ONy1JJ!Pkjp)1 za3U>Z*m9pLG>xzyrx33}D{ny9$u#@PU!20fZPTmDYP0Ln3M)0?9IqWT#e<)VUBYy; zAPk&USKzbK_Rz}SyQbW%j)C5ji-93G-aI!lzLtiv%%K*lp|RY5D(Sl^ zv6_I+?arZPp+*Q9sTv{oVBmdYOX4J)hFTcg2XfGl9`pb@e_P`lMRV9A@2u`Fw}{E% z&sALEosqt1w>FPZQB3&HpJU%wK2#dnF^6BZ+sR`W;YYdz+6~TdP)6KD4MOU9Zka~F z?8*~(cRhx%0iQs<*o;#XmK|{wlkr{&OSjPZFNL zryoDI*F+kuzeJ2MB4q%z2I1V8ohfbT2d#S6>tlDq zlU;fD)j7ADBXt37$`K|a?=6;7mm^ww6>?D;0FlOit2i~|-4r;^X$6uFQw|x{sd!K} zm|1CSMy5;*#z(_!5TEQx-gEU$TcUcbXpeFx(Ou6@4>pvP#}>uQ9+9ar(ju8?iE>a= zjv?2xA>x3ov5!u_63Zo>wD$SPXX+Lol=ZTT>Cjgxr@<=`o%Fg0Ys5x1t2??2Mn7i8`xd5w$_VF=bBm`4{9KmI*_Sm ztR6kLeHf)L@|=T=k6&;S02wh*GRKF5-ankv)N>Q1Ya`O@BWX(O02S?)b02tdhO z#1Q6aD74HA9Ze-1Qtt#;S$@QIm68@eG@BUQP(%bHRY2KliN?>aWe3viQ#9bH-QWaK zY-{e8oy^TCSA-?Z(5)frV~U$+E4S#6t`ZQmUOT(gS$Z8MSn`Y3#qnfEE=pKX)w$;z z1i!=D@0N|UxTX+1P|g!(j(3E!4%4aG``~E9+GB9d>po&l@N?FYk(2Xw(6EXd@KF2% z`?h98bbZK}$mO9Kt&Q7~f4EQil%hO`UESE-d0HhR24zunsrn#O^rFDT-$gat%Ug`> zW3o+9kd&5j74;r&Z_OtdhPQub!at_fzdXOB1keQpEiqzxMGFe!BM>m`D5C6=Uq`%~ zQX*%ddSkzvc&tik+!8vcR-zQuwK4ol`@?6>Tw2x}2?ral39kaT=FD$3v)t53`7pa@ zB8f#EVRy3ree>no5nCWThk|L!kK~V6aNw@~{GKGwVKAL@*003Rp;X>_DI zcvT8#rFh;&V3r^h^4k8%++UvmM~EUEBj}^{##fGiz4t-?3ttrk{`bbmOL0UVPX(PP zT3miEr3Y*%gr6cl0Mc)n!au|S3KWPyVNHeyq@w#CZYpY4AT$>0L-Hjiv8;9&QxJp9 zE^(~v{WZ#u1hNCCF>L4o^+T=ot2Kv)a%O(1vlUHVFa=- ze7{disL(aVbti4ff-n|EU-Gzrfbn#zh7gZ{}%auXR&wI-MP*5n{yr5JJF)V zcD?q=k}~x&MMEv!c@70m*}|JA^1fss7>Ne28Qx^4XmZGr zqUM;zd_ng@lFW@s`1>bVW_BE$ECv;Vr7LT=ddfIR->8B#Iw!|mT0gei6Bx)@Vc)R> zJ55AS; znA=%3Yqn0hk;g`*(%J#gJmtnx$g=a|%}#ki=)us9RR=M}FIUHm7{VAwkY4bb5-G;D zkR)JOM@}lrA(D#)1jSBL?@Ca{lzd&a;*8j>l}=`BiLMUdH(ePE7z-ivt8h$V%z7Qy zsw}|#VR!faQnlCZXj2XO4|qF^^q`g?9;bW(+d&_T%(Jr(-F5o#d1a#@_C}g%yZD5! zQB2HN?tG3R!ZXCrk5h(*!mK8FPnRK&zOq*4F^VS{*eqB$=bbV^&c&uAIR+BkS-a6# zQpIxDxwaJY=8=YDC>bUiaM>XF7R_#t5~)%>zUxy<`LL+xxXZ={(aM>zMlDlmAu~i^ zNe#t|G3{l6)`-Z=XnEs(SN>DF3ruj?3G`mE_sJZP^`YC8cI)`7_DZej=E%3l2J_q3 zb4g~4NO!eL4jRUBr3~eo=3b}cExu3C?~doGgy(av7Up{%7#Kh-!|n0h4{-(|Z{_Di zBl$BQBW|0vVZgnbqL6v|_euM+^c@c%u1KZ0uShrd?vX7({Ktt5CgpAoGUORHu6epM z42n|cJRvtHN6^}T0)>;S00Ot&pch+OM6O^X#+T6nE0Zq99Cx(xcqM$(4k63kw@j5q zh*|p9CLGRwNbCvpg6kv{@B!u%l zbnhR8#&u&+U&UR^B~^{tq%*D1mZqdzP1LTiE%3T@xxeGFL1r0PI~-%X1QX>2+wk6D zXDUF~pTRuePU#4MTHO0a+VSd|M~>ua9;1{a57Y3|p&VNg%^S+@q0d{QDTbh*?J)a= z)RI6}5qx0}1z74#Q(P8&61>v+RW7&S*jV?xg@B}gP1#g`2?1}~NnvY4TN^WL$G^$g ztMX|4$UJEDD_Th!=t9CRFt}jYm-JL{VYmob2vAo+Z6h(|LDJ@RJzM@hTmF3dW{DW@ zORm9hMW5jsOenE^vpc0O#*fbDyb4XaULKwyyQ#96ZYgH$~oZbI=i-+`!GUa2+>s=0Pw-T&BS`nP zB)!<^W~H}uBonf4T-MCjlugfYC&(bw>qqsXw1#5%j&PmLO{o zm(w$`u`^I1X;rpJwBUrW#44qiHe2i?)411CBACdHvR&=9DBR%UXlja#$b8E}n|F!2X~vExw9sXG$ZX0 z7fO&=WY|@3yfIsSnYysi8?VZ?eumIy1u^Oq9DXFYu`sR3g6!{W%Nz$7js`kNo-l_l z5xpLQygiG)2odn`ack}1L`!zKbgG?n~O zgCIzcr_FqexZM)`q!4+6FM8)T7CCM%eb)0^8Umdesqa068x3M_fwv6N{(2Gbs4T<_ zbClQ^bAT%fZt@G%kGY#cJ4&URqY>9B%-y$GkW*y!A93BnzEy(;24rEzYQ6|z$|tzU zFmbxRdapqr$g4cnBPw_)PBirb^5pvRqbVG$#IO7~ zKgmB3uJ9@-roA`8en(;mb5TyI&$9T5!5i$CmmwX@Wf8xL6wcl}?VtN1On>n*1p#4K z10!2UGaG9%B?SRRGbNCp9mkgjapkbC_3x{1hT{6d0*0-J7(O*Y02x;puIK{K)?u^}B)iaOKD zJ3aVX+TCII6iVN%8vvCgag2_1CLvHV0$nk!sc!Q;4j2q$(uz^dk2J|U3FQMh+= z9SW4(`Ij$}l@W{~4Dflx@GOcKClHl zTu$oY`xq79HcrY*v50drF7uapgvxS!H6O&Y~ zdSiQ3IkLzUtu~D$dj=zXhNW0kNc4uZ?L?wG`sOK69t@-zMZNKxuLa1>6ZaSL4AW%s z&FTDoDSKsW6ol+#rUFPV)o{N0h0K90#^)bRx4q36jPL)(Yz=qy2dwl~; zw)CAdvt`YuN=F%wrnPH)Of4I{N2e(UGgIorw7@Pd;zD4Vb9+J0!#srlMGK-3Z9U<) zy#Rls#y{@|*?;ZF-!sAMQ=7~i6Eavs{iOs1h+%U-PG7}T%NK|x_<^7f=Z@s@r7PGE zbCNzqm_FckeufM6L)xN!fb<5bVWa*?oVLEwvYy(q6n%gNVpR{b+B3c|=rY&uGSs&l zn>I$pTIAx}&O|dyj-2z|;b3(aH799UHPrUqZa~S^4_IG%m_+`3G}8Li5XQuTdzq(~ z?TRImWuAh>BQ#u(jfQ57H}1?6q^Ta6x%dcB0di^8g8VU{Ar)bi-iVPp>4g&=@J5XF zaIi*n%kdk(_bI6oFkBn2e8=_yWG-Wl-sHp_eN>U)ZiT>^2|o0wTGG?r9aj)Nc;V$W zNp3Y&V<9#7N+aXPakaHG|31oc-fvt=m6KRwP2}^~tXMa=#~-5>Yho=}uhYL#{#y8- zRFk!oZwue}KSTfpLkIa|3jFu+?O#*if3|;`373`p1LarG>G$c>U!&fCnBLpV-$sG{ zZt(lBV82gO690kp_GgMv#Ap_SPf&eIE0#aK8^g{Th(_ z!!X`d-XW5Un5h0*eAIE!unmr_E(_ah3miC?SI%S;2(hg>n!nC z%-@Boza;N}*n5;eWBwt4|0~AtYQ0~Q);}x;<4+iW5xD-2^Gn zw&?%1NWXVX|GY?=Z)dLGKz{AqKip9K{>6Uz{qJ3!U%l2pY?=1IF#m6O^8a(~e?KYy zY6<;eAq;{O@VzS91Tuo<95|{NEGw_rUopFa2TR+<%4o`z$3Z3Hf%^ S00BXLd)U0i8wlQCzx_W_jbC8^ diff --git a/blackbox/Usb/Rsrc/usbpdi.jar b/blackbox/Usb/Rsrc/usbpdi.jar deleted file mode 100644 index bef89dc185b7bf0668e65c93db006afe15b0d9d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29360 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]w1n_sLzb8t*#CtaUUgj$iya0Rk%0c8;yno69{2lFO3eK;4WlH=X(Ed5& z>37hV@yF-voxem@^4~%KzNXK&`!am-9I^aMiWL5i^;`V%<-neG%1am9uba3=a7v#Tfndf_cc|0Td>xQ4MN}qJ!FFNH9GwRp#`pXeMqrE&s z{JO+_2LFWij|aTpL0?*Z&&Q9y#NOyXKz~1s{0{r_west1qM7~&>@NnStOUgC=i#6| NeWISOU@f2j{U3gX-TD9k diff --git a/distribute/Definitions.txt b/distribute/Definitions.txt deleted file mode 100644 index 70b1842..0000000 --- a/distribute/Definitions.txt +++ /dev/null @@ -1,4 +0,0 @@ -Manufacturer string: NTB -Product string: USB Programming and Debugging Interface -VID: 0x8235 -PDI: 0x0100 diff --git a/distribute/LibusbWin.dll b/distribute/LibusbWin.dll deleted file mode 100644 index 102cc879bdab22eb2fac588363e3025ecadc7971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37716 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


0Iq~I2!$tg`JTb1O8yEr=iq)cNbg#+EC`byNzfI z>w*}xoFjutjg!>ym9=w2A>Ue0(BI+jjCdLxE~$~xgPH{ftsjTqWQ4=5F7FjaG?aMn z#`?H$coeniahMgk;B8|&)<%pG*08}rM|vz~RZggyw>IJ*LzB;_DJ>3bMfF{stHw~Y z#;hnMhlL`PQX^Xvx3uX-Ps7bENm5O>%_7`twvAzJqr+>IoHmz9VVRm(9xbIDcJJLC z{z!Wl>d<`#O=-YQDjfFtex6PX>vT$PZfSHSxiJ>dEY<3sk6SHmPtpVS9?)H^e6=_Y(gqENn;j z;qczwjMk5L9>Ip2liIp;nJjV(Rhn{3^b|>XlyuX??xaenV`sfxILY3Ic7xQkc~a!v zD#|;)YOTguYK|neKD>QJ&5Rg(_vCvf#~f}r#<^?pSpv9(Ap=*Ic~!8h*%$P-vge5g5`V<#^>+K| zqZ8gxPiG|1;rFulRPcp~kfMKaWmYf{j^OPTFMR=nzCYm&WAQ|Qh8T>beiQ?XJKKCc z!HBm9gY|BFx`kU}_;3a-W*4u$k2Cc!{KaAAb;xBY47}tB-TD($9(3X3=cmmuJ;8q%MP?r)~?PvCP z`0nlsp}3mEYr_$Lhj+C<6h>>!eZ!-0@0y@yqg;-x8KN#Ml?zVc7UK$NTq=b>&0tnj zMHbI(g-axf`cp$EEd6C`m~}v{*6;k#1^xCejR*;l_n^^mV~b zeArLKMLfoay~Ykm-#Jl^lH+{XM7~k0Ez^jpXTL~!c^FJ}QjKSzgDQl+c@1{?TKyq! zThO;E%qj_!ruI?n%FyDgF1R;!Xt z7{JW0Py>-Hg$e-*Mn+qHo8I^@x{^ik?4qty4>K^d4U{+hh%YdPt3% R7IkCyOek4RWrFhj_%9Ppe$D^@ diff --git a/distribute/Output/setup.exe b/distribute/Output/setup.exe deleted file mode 100644 index 47458440004d4d436a78a63986a29cf7a2ea069e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419568 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 _5K74hD%MLBSKrGC@~^X>Wk>$)#f$0 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

(8Uk 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 z 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ð*8`!q~rh!v*3RJw7M>(h4=0 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 V%sp032ofYm`jk>FU;pwxubQZ3k@Elm diff --git a/distribute/USBPDI.cat b/distribute/USBPDI.cat deleted file mode 100644 index 2ef39c5..0000000 --- a/distribute/USBPDI.cat +++ /dev/null @@ -1,3 +0,0 @@ -This file will contain the digital signature of the files to be installed -on the system. -This file will be provided by Microsoft upon certification of your drivers. diff --git a/distribute/USBPDI.inf b/distribute/USBPDI.inf deleted file mode 100644 index 2ba06fe..0000000 --- a/distribute/USBPDI.inf +++ /dev/null @@ -1,106 +0,0 @@ -[Version] -Signature = "$Chicago$" -provider = %manufacturer% -DriverVer = 10/14/2005,0.1.10.2 -CatalogFile = USBPDI.cat - -Class = LibUsbDevices -ClassGUID = {EB781AAF-9C70-4523-A5DF-642A87ECA567} - -[ClassInstall] -AddReg=ClassInstall.AddReg - -[ClassInstall32] -AddReg=ClassInstall.AddReg - -[ClassInstall.AddReg] -HKR,,,,"LibUSB-Win32 Devices" -HKR,,Icon,,"-20" - -[Manufacturer] -%manufacturer%=Devices - -;-------------------------------------------------------------------------- -; Files -;-------------------------------------------------------------------------- - -[SourceDisksNames] -1 = "Libusb-Win32 Driver Installation Disk",, - -[SourceDisksFiles] -libusb0.sys = 1,, -libusb0.dll = 1,, -LibusbWin.dll = 1,, - -[DestinationDirs] -LIBUSB.Files.Sys = 10,System32\Drivers -LIBUSB.Files.Dll = 10,System32 -LIBUSB.Files.Dll2 = 10,System32 - -[LIBUSB.Files.Sys] -libusb0.sys - -[LIBUSB.Files.Dll] -libusb0.dll - -[LIBUSB.Files.DllJNI] -LibusbWin.dll - -;-------------------------------------------------------------------------- -; Device driver -;-------------------------------------------------------------------------- - -[LIBUSB_DEV] -CopyFiles = LIBUSB.Files.Sys, LIBUSB.Files.Dll, LIBUSB.Files.DllJNI -AddReg = LIBUSB_DEV.AddReg - -[LIBUSB_DEV.NT] -CopyFiles = LIBUSB.Files.Sys, LIBUSB.Files.Dll, LIBUSB.Files.DllJNI - -[LIBUSB_DEV.HW] -DelReg = LIBUSB_DEV.DelReg.HW -AddReg = LIBUSB_DEV.AddReg.HW - -[LIBUSB_DEV.NT.HW] -DelReg = LIBUSB_DEV.DelReg.HW -AddReg = LIBUSB_DEV.AddReg.HW - -[LIBUSB_DEV.NT.Services] -AddService = libusb0, 0x00000002, LIBUSB.AddService - -[LIBUSB_DEV.AddReg] -HKR,,DevLoader,,*ntkern -HKR,,NTMPDriver,,libusb0.sys - -[LIBUSB_DEV.DelReg.HW] -HKR,,LowerFilters -HKR,,UpperFilters - -[LIBUSB_DEV.AddReg.HW] -HKR,,libusb_is_device_driver, 0x00010001 ,1 - -;-------------------------------------------------------------------------- -; Services -;-------------------------------------------------------------------------- - -[LIBUSB.AddService] -DisplayName = "LibUsb-Win32 - Kernel Driver 10/14/2005, 0.1.10.2" -ServiceType = 1 -StartType = 3 -ErrorControl = 0 -ServiceBinary = %12%\libusb0.sys - -;-------------------------------------------------------------------------- -; Devices -;-------------------------------------------------------------------------- - -[Devices] -"USB Programming and Debugging Interface"=LIBUSB_DEV, USB\VID_8235&PID_0100 - - -;-------------------------------------------------------------------------- -; Strings -;-------------------------------------------------------------------------- - -[Strings] -manufacturer = "NTB" diff --git a/distribute/driver_installer_template.iss b/distribute/driver_installer_template.iss deleted file mode 100644 index 7979af0..0000000 --- a/distribute/driver_installer_template.iss +++ /dev/null @@ -1,190 +0,0 @@ -; This examples demonstrates how libusb's drivers -; can be installed automatically along with your application using an installer. -; -; Requirements: Inno Setup (http://www.jrsoftware.org/isdl.php) -; -; To use this script, do the following: -; - copy libusb's driver (libusb0.sys, libusb0.dll) to this folder -; - create an .inf and .cab file using libusb's 'inf-wiward.exe' -; and save the generated files in this folder. -; - in this script replace with the name of your .inf file -; - customize other settings (strings) -; - open this scipt with Inno Setup -; - compile and run - -[Setup] -AppName=USB Programming and Debugging Interface -AppVerName=USB Programming and Debugging Interface 0.0.2 -AppPublisher=NTB -AppPublisherURL=http://inf.ntb.ch/ -AppVersion=0.0.2 -DefaultDirName={pf}\USB PD-Interface -DefaultGroupName=USB PD-Interface -Compression=lzma -SolidCompression=yes -ChangesEnvironment=yes -; WinMe or higher -MinVersion=4.9,5 -PrivilegesRequired=admin -WizardImageFile=setupUSBPDI_2.bmp -WizardSmallImageFile=setupUSBPDI_2small.bmp - -[Files] -; copy the file to the App folder -Source: "*.sys"; DestDir: "{app}\driver" -Source: "*.cat"; DestDir: "{app}\driver" -Source: "*.dll"; DestDir: "{app}\driver" -Source: "*.inf"; DestDir: "{app}\driver" - -; also copy the DLL to the system folders so that rundll32.exe will find it -Source: "*.dll"; DestDir: "{win}\system32"; FLags: replacesameversion restartreplace uninsneveruninstall - -[Icons] -Name: "{group}\Uninstall USB PD-Interface"; Filename: "{uninstallexe}" - -[Run] -; invoke libusb's DLL to install the .inf file -Filename: "rundll32"; Parameters: "libusb0.dll,usb_install_driver_np_rundll {app}\driver\USBPDI.inf"; StatusMsg: "Installing Programming and Debugging Interface driver (this may take a few seconds) ..." - -[Code] -const - WM_SETTINGCHANGE = $1A; - SMTO_ABORTIFHUNG = $2; - -function SendMessageTimeout(hwnd :LongInt; msg :LongInt; wParam :LongInt; - lParam :String; fuFlags :LongInt; uTimeout :LongInt; var lpdwResult :LongInt): LongInt; - external 'SendMessageTimeoutA@user32.dll stdcall'; - -// NotifyWindows: The function will notify other running applications -// (notably Windows Explorer) that they should reload their environment -// variables from the registry. -// On Windows NT platforms, if the funtion is not called, the -// environment variable will not be seen by applications launched from -// Explorer until the user logs off or restarts the computer. -procedure NotifyWindows(); -var - res :LOngInt; -begin - SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,'Environment', SMTO_ABORTIFHUNG, 5000, res); -end; - -{returns true if s1 contains s2, else false (Case insensitive)} -function ContainsString(const s1, s2 :String):Boolean; -var - s1Lower, s2Lower :String; i, j, s1Length, s2Length:Integer; -begin - s1Lower := Lowercase(s1); - s2Lower := Lowercase(s2); - s1Length := Length(s1); - s2Length := Length(s2); - if s1Length < s2Length then begin - Result := False; - Exit; - end; - j := 1; - for i := 1 TO s1Length do begin - if j > s2Length then begin - Result := True; - Exit - end; - if s1Lower[i] = s2Lower[j] then begin - j := j + 1; - end else begin - j := 1; - end - end; - Result := False; -end; - -function InitializeSetup(): Boolean; -var - Rootkey, Res: Integer; SubKeyName, ResultStr, ValueName, messageStr, JREPath, JREBin, JREBinClient, EnvPath: String; - javaInstalled, continueOnError, writeRegistry: Boolean; -begin - javaInstalled := True; - continueOnError := False; - rootKey := HKLM; - SubKeyName := 'SOFTWARE\JavaSoft\Java Runtime Environment'; - ValueName := 'CurrentVersion'; - if not RegQueryStringValue(RootKey, SubKeyName, ValueName, ResultStr) then - javaInstalled := False; - if javaInstalled then begin - if not RegQueryStringValue(RootKey, SubKeyName, ValueName, ResultStr) then begin - javaInstalled := False; - end else begin - SubKeyName := SubKeyName + '\' + ResultStr; - ValueName := 'JavaHome'; - if not RegQueryStringValue(RootKey, SubKeyName, ValueName, JREPath) then - javaInstalled := False; - end; - end; - if not javaInstalled then begin - messageStr := 'No Java Runtime Environment found!' #13#10; - messageStr := messageStr + 'The JRE is needed to run this program.' #13#13; - messageStr := messageStr + 'If you continue, you need to set your PATH environment variable manualy to' #13#10; - messageStr := messageStr + 'JRE\bin and JRE\bin\client after installing the JRE from java.sun.com.' #13#13; - messageStr := messageStr + 'Do you want to continue?'; - if MsgBox(messageStr, mbError, MB_YESNO) = idYes then - continueOnError := True; - end; - if javaInstalled then begin - Result := True; - {JREPath contains the path to the JRE directory (e.g. C:\Program Files\Java\jre1.5.0_06)} - {get the USER Path variable} - RootKey := HKCU; - SubKeyName := 'Environment'; - ValueName := 'PATH'; - JREBin := JREPath + '\bin'; - JREBinClient := JREPath + '\bin\client'; - {check if PATH is already set} - if not RegValueExists(RootKey, SubKeyName, ValueName) then begin - {create new PATH entry} - messageStr := 'In order to run the program the path to your JRE\bin and JRE\bin\client must be added.' #13#10; - messageStr := messageStr + 'Setup will added this paths to your User PATH variable.' #13#13; - messageStr := messageStr + 'Do you want Setup to modify your PATH variable?'; - if MsgBox(messageStr, mbConfirmation, MB_YESNO) = idYes then begin - RegWriteStringValue(RootKey, SubKeyName, ValueName, JREBin + ';' + JREBinClient); - NotifyWindows(); - end - end else begin - if RegQueryStringValue(RootKey, SubKeyName, ValueName, EnvPath) then begin - writeRegistry := False; - {check if EnvPath contains the right paths} - if not ContainsString(EnvPath, JREBin) then begin - {add to Path} - Res := Length(EnvPath); - if EnvPath[Res] = ';' then begin - end else begin - EnvPath := EnvPath + ';'; - end; - EnvPath := EnvPath + JREBin; - writeRegistry := True; - end - if not ContainsString(EnvPath, JREBinClient) then begin - {add to Path} - Res := Length(EnvPath); - if EnvPath[Res] = ';' then begin - end else begin - EnvPath := EnvPath + ';'; - end; - EnvPath := EnvPath + JREBinClient; - writeRegistry := True; - end - if writeRegistry then begin - messageStr := 'In order to run the program the path to your JRE\bin and JRE\bin\client must be added.' #13#10; - messageStr := messageStr + 'Setup will added this paths to your User PATH variable.' #13#13; - messageStr := messageStr + 'Do you want Setup to modify your PATH variable?'; - if MsgBox(messageStr, mbConfirmation, MB_YESNO) = idYes then begin - RegWriteStringValue(RootKey, SubKeyName, ValueName, EnvPath); - NotifyWindows(); - end - end - end else - continueOnError := True; - end; - end else - Result := False; - if continueOnError then - Result := True; -end; - diff --git a/distribute/libusb0.dll b/distribute/libusb0.dll deleted file mode 100644 index ce635efd866161b108c31f84795a2b43b4c4b571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43008 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 Wol6U-J7Dnd_&ylt@|j=5hx`wy%VqNb diff --git a/distribute/setupUSBPDI_2small.bmp b/distribute/setupUSBPDI_2small.bmp deleted file mode 100644 index 6dc51c03c5a2d8c905a63a409bae6db6153c414a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4158 zcmeH}dstKV8OPs{9KgdRRx~wW1VW|ANTHDkB#ydh$EYF~g#b;Yn8*~3wAxSwjet0q zK@_wBLIe`Ts!>poS`_huckx17acI5Hu6A?ln9KtR!B0`ng9Gl&_wJs|=|^ur{O|)je)0q!J$?fJe)1Up_2>~i zeE1N)`~G|Q=Y#Ly!9V^E5AOX1?%%%;-`x8azW(MOe2dqA`}!{2y?YmK-ns=hZ{C9Y zx39yUTQ}f39)G=l74F=)4)?AOz@G;P;LhcKxc&JBxO3qw+&*^#zPfe|t_)sc&Q)yE?$Bg{paC}{)=!CnH%TNLjQ$6xPJBoTt3|kU!6P(eSPQP z)Y)@z^3)kPd-@cdIe7w(AMb_3M~*`G;UjSE*dh4*SU2?b_Q0_tJuukQ1%n4WVW6uW z2KMiP(}xeh(Vl~F;n05QJ-8o^f4UdG=-37Qdp>~+cs}0lfd01aaH*{Yj!8nWhLbik^lqt!V|A5q#JmoUZdwc7-3MWRR~H=U>V&TS z`(R&Z2eh?!K+nEbXm8&Qt$TODXKg!RZ|hDtw9^jljuzxY7*x6tKhh;M~*WzKWf=<*w{Bb#S)KoxEbt&w_ zqt#Lgj?E^pZ(IkCjcei1hGKA3t^vEL6uM0-VV|iG4wfy41En9rr)!pi13%kK3!tq$ zA6iS7L03^8bQUcE2cAD$y#zW|<-(qV9N3$$1;?s|uysW)*bEDxb%hRg=g))20zEW- zv=AEK&j!abHSEYshpkI8VY@yJS{BWL=A2|`)+Rv1q6}!5p8}29Gr=}D9-1_9(3thk zkLL3K7r%4`xGpY0{R|UaaN+VOCfwN**M<8sp3C6?`Da&}ga>(}XuNjey1WGCvXBRV zC_FuAS2v3KUm&A}68u+0B9R!wUp!tU8p-!WRh0Z`w~Q8{f`TNHaEUZrB9R1%{Y88} zO}qUhiFu$FDoG>}(#Xivv{d|ylu9M9iAAq?(yr9-WF4Sfs zjU;Lkv%`=S-S?xCa$Eb;t{+Q$oPO)pKCXQWO zTWhJY)YTE6_=YTzwb?i2W~NCe`U^;o&na>^1RMXGKbV=QsWIcL4yh)>Vc52OkeMMx ztJsd`L2SV2@xQOCHsgy4v$F$3_JEP%~|qr){$~4O2uxryhrL^BO&~ z9HXT8X)M%gby+$o0C&{5_&ST#Vzt^=Wu{8R&oU%7ql(Il%ZiGNi%1~+A!6DrU93E% z*le}dB8agiCrv6AdAL*T%0Qc=lNrRwM!tRlV#H_(Ti%))Y^Jr|Uh2${HA>MQzbZr- zgbIyD!%~DuAg3!XE-{&~yk=I>GCwsOjk+=!VtSr&h!q+QMuS10t>_A?p)pw^L07otkz@~78#3H=j-)E&{{C*4Kix1o@d;gwC{p&pZ!6pE(b>&Cp$x( zEe$9kMpsUHnje?)j*1A6j*gy+SbBtrFx(NZj`IWXL2Wdk)ur-zi8Z7&1%z`hK{_xZ zA_}=wRjk+zfH%TVru=PuLZWgEa3pA2ryA|zH)lQRzGb;oBEtI`@yQE(Jt87P8m)>A z#Oo1$a-}m85@kH_QmI8SCec)0Lb`9s3lHKu^?ZUSA{P}o5w*t16iT@~My^mG8yBCL z@G1bueOhs`u?WWo$8>>2Jd&L=x4_`w2)wZi0K8>NMT|@qgQ1Wk85f_BtQaN3vBj~+ z=Hq~8F}E0ElaCw*kq^CSxH2%kR(|7J4TLF#akc>5K}yAtU@85Oyv9mg+k#31R24& z_!)^w$tgq+IRi6eOw(!P_&hF$3Q?dOa=t==Q0V7JjABWr#bIGmkSoOeN~VhV9?oZ{ zJ6{ms#RD#fma*wg5RMfJ14Bq<Lsp#TkX=BxUgx z3VpGpVKUNsrV-A1Ciyc@T#_Azmyd|tM$ze5XBT`iyU!#IFbNy@jF9L1U^(V$@&lCfv5k2ni6f?%GK9^VJ^?KbOFfeY9_2#O0%2GT$|;r8r%w(M u;C_&7M4$VoVL#%|4 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mcdp/resources/targets/general/memoryMap.dtd b/mcdp/resources/targets/general/memoryMap.dtd deleted file mode 100644 index 3870c45..0000000 --- a/mcdp/resources/targets/general/memoryMap.dtd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/mcdp/resources/targets/general/registerDictionary.dtd b/mcdp/resources/targets/general/registerDictionary.dtd deleted file mode 100644 index f6bccc3..0000000 --- a/mcdp/resources/targets/general/registerDictionary.dtd +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - diff --git a/mcdp/resources/targets/mc68332/registerDictionary.dtd b/mcdp/resources/targets/mc68332/registerDictionary.dtd deleted file mode 100644 index b617f4c..0000000 --- a/mcdp/resources/targets/mc68332/registerDictionary.dtd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/mcdp/resources/targets/mc68332/registerDictionary.xml b/mcdp/resources/targets/mc68332/registerDictionary.xml deleted file mode 100644 index 417ea3f..0000000 --- a/mcdp/resources/targets/mc68332/registerDictionary.xml +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - - - - data register 0 - - - data register 1 - - - data register 2 - - - data register 3 - - - data register 43 - - - data register 5 - - - data register 6 - - - data register 7 - - - - - address register 0 - - - address register 1 - - - address register 2 - - - address register 3 - - - address register 4 - - - address register 5 - - - address register 06 - - - address register 7 - - - - - return program counter - - - current instruction program counter - - - status register - - - user stack pointer (A7) - - - supervisor stack pointer - - - source function code register - - - destination function code register - - - temporary register A - - - fault address register - - - vector base register - - - - - - sim module configuration register - - - clock synthesizer control - - - system protection control - - - - chip select pin assignment register 0 - - - - - chip select pin assignment register 1 - - - - CSBOOT base address register - - - CSBOOT option register - - - - - chip select 0 base address register - - - - chip select 0 option register - - - - chip select 1 base address register - - - - chip select 1 option register - - - - chip select 2 base address register - - - - chip select 2 option register - - - - chip select 3 base address register - - - - chip select 3 option register - - - - chip select 4 base address register - - - - chip select 4 option register - - - - chip select 5 base address register - - - - chip select 5 option register - - - - chip select 6 base address register - - - - chip select 6 option register - - - - chip select 7 base address register - - - - chip select 7 option register - - - - chip select 8 base address register - - - - chip select 8 option register - - - - chip select 9 base address register - - - - chip select 9 option register - - - - - - - - TPURAM module configuration register - - - - - TPURAM base address and status register - - - - - TPU module control register - - - TPU configuration register - - - - development support control register - - - - - development support status register - - - - - TPU interrupt configuration register - - - - TPU interrupt enable register - - - - channel function select register 0 - - - - - channel function select register 1 - - - - - channel function select register 2 - - - - - channel function select register 3 - - - - host sequence register 0 - - - host sequence register 1 - - - host service request register 0 - - - host service request register 1 - - - channel priority register 0 - - - channel priority register 1 - - - TPU interrupt status register - - - ??? - - - service grant latch register - - - decoded channel number register - - - - - - Port E data register 0 - - - Port E data register 1 - - - Port E data direction register - - - Port E pin assignment register - - - - - - Port F data register 0 - - - Port F data register 1 - - - Port F data direction register - - - Port F pin assignment register - - - - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - TPU parameter ram start address - - - - - - QSM configuration register - - - QSM test register - - - QSM interrupt level register - - - QSM interrupt vector register - - - SCI control register 0 - - - SCI control register 1 - - - SCI status register - - - SCI data register - - - - QSM port data register - - - QSM pin assignment register - - - QSM data direction register - - - QSPI control register 0 - - - QSPI control register 1 - - - QSPI control register 2 - - - QSPI control register 3 - - - QSPI status register - - - - QSPI receive data - - - QSPI transmit data - - - QSPI command control - - - \ No newline at end of file diff --git a/mcdp/resources/targets/mpc555/devices/deviceAm29LV160D.xml b/mcdp/resources/targets/mpc555/devices/deviceAm29LV160D.xml deleted file mode 100644 index b9575cc..0000000 --- a/mcdp/resources/targets/mpc555/devices/deviceAm29LV160D.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - 0x200000 - - ToppcKernel.CextRomBase - ToppcKernel.CextRomSize - - - ToppcKernel.excpCodeSize - - - - 0x6000 - - - - 0x4000 - - - 0x4000 - - - 0x10000 - - - 0x20000 - - - - ToppcKernel.pBR0 - ToppcKernel.pOR0 - - \ No newline at end of file diff --git a/mcdp/resources/targets/mpc555/devices/deviceMPC555Flash.xml b/mcdp/resources/targets/mpc555/devices/deviceMPC555Flash.xml deleted file mode 100644 index 1d16329..0000000 --- a/mcdp/resources/targets/mpc555/devices/deviceMPC555Flash.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - 0x2000 - 0x3E000 - - - 0x40000 - 0x30000 - - \ No newline at end of file diff --git a/mcdp/resources/targets/mpc555/devices/deviceRAM.xml b/mcdp/resources/targets/mpc555/devices/deviceRAM.xml deleted file mode 100644 index 2fadcf6..0000000 --- a/mcdp/resources/targets/mpc555/devices/deviceRAM.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - 0 - 0x2000 - - 0 - - - - ToppcKernel.CintRamBase - ToppcKernel.CintRamSize - - - ToppcKernel.sysTabAdr - - - - - - - - - - - - - ToppcKernel.stackSize - - - - - ToppcKernel.CextRamBase - ToppcKernel.CextRamSize - - - - - - ToppcKernel.pBR0 - ToppcKernel.pOR0 - ToppcKernel.pBR1 - ToppcKernel.pOR1 - - ToppcKernel.pDMBR - - - ToppcKernel.pDMOR - - 7 - - -1 - - 0x31C7400F - - 0x03802 - - \ No newline at end of file diff --git a/mcdp/resources/targets/mpc555/memoryAssignmentRAM.xml b/mcdp/resources/targets/mpc555/memoryAssignmentRAM.xml deleted file mode 100644 index 9ded604..0000000 --- a/mcdp/resources/targets/mpc555/memoryAssignmentRAM.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - InternalRam.SysTab - - - InternalRam - InternalRam - InternalRam - - - only_link_if_referenced - - - InternalFlashAblock0.ExcCode - - - \ No newline at end of file diff --git a/mcdp/resources/targets/mpc555/memoryMap.xml b/mcdp/resources/targets/mpc555/memoryMap.xml deleted file mode 100644 index 48a112e..0000000 --- a/mcdp/resources/targets/mpc555/memoryMap.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/mcdp/resources/targets/mpc555/registerDictionary.dtd b/mcdp/resources/targets/mpc555/registerDictionary.dtd deleted file mode 100644 index c86bb4e..0000000 --- a/mcdp/resources/targets/mpc555/registerDictionary.dtd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/mcdp/resources/targets/mpc555/registerDictionary.xml b/mcdp/resources/targets/mpc555/registerDictionary.xml deleted file mode 100644 index 29c7c35..0000000 --- a/mcdp/resources/targets/mpc555/registerDictionary.xml +++ /dev/null @@ -1,1954 +0,0 @@ - - - - - - - - - General Purpose Register 0 - - - General Purpose Register 1 - - - General Purpose Register 2 - - - General Purpose Register 3 - - - General Purpose Register 4 - - - General Purpose Register 5 - - - General Purpose Register 6 - - - General Purpose Register 7 - - - General Purpose Register 8 - - - General Purpose Register 9 - - - General Purpose Register 10 - - - General Purpose Register 11 - - - General Purpose Register 12 - - - General Purpose Register 13 - - - General Purpose Register 14 - - - General Purpose Register 15 - - - General Purpose Register 16 - - - General Purpose Register 17 - - - General Purpose Register 18 - - - General Purpose Register 19 - - - General Purpose Register 20 - - - General Purpose Register 21 - - - General Purpose Register 22 - - - General Purpose Register 23 - - - General Purpose Register 24 - - - General Purpose Register 25 - - - General Purpose Register 26 - - - General Purpose Register 27 - - - General Purpose Register 28 - - - General Purpose Register 29 - - - General Purpose Register 30 - - - General Purpose Register 31 - - - - - Floating-Point Register 0 - - - Floating-Point Register 1 - - - Floating-Point Register 2 - - - Floating-Point Register 3 - - - Floating-Point Register 4 - - - Floating-Point Register 5 - - - Floating-Point Register 6 - - - Floating-Point Register 7 - - - Floating-Point Register 8 - - - Floating-Point Register 9 - - - Floating-Point Register 10 - - - Floating-Point Register 11 - - - Floating-Point Register 12 - - - Floating-Point Register 13 - - - Floating-Point Register 14 - - - Floating-Point Register 15 - - - Floating-Point Register 16 - - - Floating-Point Register 17 - - - Floating-Point Register 18 - - - Floating-Point Register 19 - - - Floating-Point Register 20 - - - Floating-Point Register 21 - - - Floating-Point Register 22 - - - Floating-Point Register 23 - - - Floating-Point Register 24 - - - Floating-Point Register 25 - - - Floating-Point Register 26 - - - Floating-Point Register 27 - - - Floating-Point Register 28 - - - Floating-Point Register 29 - - - Floating-Point Register 30 - - - Floating-Point Register 31 - - - - - Integer Exception Register (XER) - - - Link Register (LR) - - - Count Register (CTR) - - - - DAE/ Source Instruction Service Register (DSISR) - - - - Data Address Register (DAR) - - - Decrement Register (DEC) - - - Save and Restore Register 0 (SRR0) - - - Save and Restore Register 1 (SRR1) - - - External Interrupt Enable (EIE) - - - External Interrupt Disable (EID) - - - Non-Recoverable Interrupt (NRI) - - - Comparator A Value Register (CMPA) - - - Comparator B Value Register (CMPB) - - - Comparator C Value Register (CMPC) - - - Comparator D Value Register (CMPD) - - - Exception Cause Register (ECR) - - - Debug Enable Register (DER) - - - - Breakpoint Counter A Value and Control (COUNTA) - - - - - Breakpoint Counter B Value and Control (COUNTB) - - - - Comparator E Value Register (CMPE) - - - Comparator F Value Register (CMPF) - - - Comparator G Value Register (CMPG) - - - Comparator H Value Register (CMPH) - - - - L-Bus Support Comparators Control (LCTRL1) - - - - - L-Bus Support Comparators Control (LCTRL2) - - - - - I-Bus Support Control Register (ICTRL) - - - - Breakpoint Address Register (BAR) - - - Time Base Lower - Read (TBLR) - - - Time Base Upper - Read (TBUR) - - - SPR General 0 (SPRG0) - - - SPR General 1 (SPRG1) - - - SPR General 2 (SPRG2) - - - SPR General 3 (SPRG3) - - - Time Base Lower - Write (TBLW) - - - Time Base Upper - Write (TBUW) - - - Processor Version Register (PVR) - - - - Global Region Attribute Register (MI_GRA) - - - - - L2U Global Region Attribute Register (L2U_GRA) - - - - - BBC Module Configuration Register (BBCMCR) - - - - - L2U Module Configuration Register (L2U_MCR) - - - - Development Port Data Register (DPDR) - - - Internal Memory Map Register (IMMR) - - - Region Address Register 0 (MI_RBA0) - - - Region Address Register 1 (MI_RBA1) - - - Region Address Register 2 (MI_RBA2) - - - Region Address Register 3 (MI_RBA3) - - - - L2U Region 0 Address Register (L2U_RBA0) - - - - - L2U Region 1 Address Register (L2U_RBA1) - - - - - L2U Region 2 Address Register (L2U_RBA2) - - - - - L2U Region 3Address Register (L2U_RBA3) - - - - Region Attribute Register 0 (MI_RA0) - - - Region Attribute Register 1 (MI_RA1) - - - Region Attribute Register 2 (MI_RA2) - - - Region Attribute Register 3 (MI_RA3) - - - - L2U Region 0 Attribute Register (L2U_RA0) - - - - - L2U Region 1 Attribute Register (L2U_RA1) - - - - - L2U Region 2 Attribute Register (L2U_RA2) - - - - - L2U Region 3 Attribute Register (L2U_RA3) - - - - - Floating-Point Exception Cause Register (FPECR) - - - - - - Machine State Register - - - Count Register - - - - Floating-Point Status and Control Register - - - - - - - - SIU Module Configuration Register - - - - System Protection Control Register - - - - Software Service Register - - - Interrupt Pending Register - - - Interrupt Mask Register - - - Interrupt Edge Level Mask - - - Interrupt Vector - - - Transfer Error Status Register - - - - USIU General-Purpose I/O Data Register 1 - - - - - USIU General-Purpose I/O Data Register 2 - - - - - USIU General-Purpose I/O Control Register - - - - - External Master Mode Control Register - - - - - Pads Module Configuration Register - - - - - - Memory Control Base Register 0 - - - Memory Control Option Register 0 - - - Memory Control Base Register 1 - - - Memory Control Option Register 1 - - - Memory Control Base Register 2 - - - Memory Control Option Register 2 - - - Memory Control Base Register 3 - - - Memory Control Option Register 3 - - - Dual Mapping Base Register - - - Dual Mapping Option Register - - - Memory Status - - - - - Time Base Status and Control - - - Time Base Reference 0 - - - Time Base Reference 1 - - - - Real Time Clock Status and Control - - - - Real Time Clock - - - Real Time Alarm Seconds - - - Real Time Alarm - - - PIT Status and Control - - - PIT Count - - - PIT Register - - - - - System Clock Control Register - - - - PLL Low Power and Reset Control Register - - - - Reset Status Register - - - Change of Lock Interrupt Register - - - VDDSRM Control Register - - - - - Time Base Status and Control Key - - - Time Base Reference 0 Key - - - Time Base Reference 1 Key - - - Time Base and Decrementer Key - - - - Real-Time Clock Status and Control Key - - - - Real-Time Clock Key - - - Real-Time Alarm Seconds Key - - - Real-Time Alarm Key - - - PIT Status and Control Key - - - PIT Count Key - - - - - System Clock Control Key - - - - PLL Low-Power and Reset Control Register Key - - - - Reset Status Register Key - - - - - - - CMF_A EEPROM Configuration Register - - - - CMF_A EEPROM Test Register - - - - CMF_A EEPROM High Voltage Control Register - - - - - - CMF_B EEPROM Configuration Register - - - - CMF_B EEPROM Test Register - - - - CMF_B EEPROM High Voltage Control Register - - - - - - - - DPT Module Configuration Register - - - Test register, factory test only - - - RAM Array Address Register - - - - Multiple Input Signature Register High - - - - - Multiple Input Signature Register Low - - - - MISC Counter - - - - - - - - - TPU3_A Module Configuration Register - - - - - TPU3_A Test Configuration Register - - - - - TPU3_A Development Support Control Register - - - - - TPU3_A Development Support Status Register - - - - - TPU3_A Interrupt Configuration Register - - - - - TPU3_A Channel Interrupt Enable Register - - - - - TPU3_A Channel Function Selection Register 0 - - - - - TPU3_A Channel Function Selection Register 1 - - - - - TPU3_A Channel Function Selection Register 2 - - - - - TPU_A Channel Function Selection Register 3 - - - - TPU_A Host Sequence Register 0 - - - TPU_A Host Sequence Register 1 - - - - TPU_A Host Service Request Register 0 - - - - - TPU_A Host Service Request Register 1 - - - - TPU_A Channel Priority Register 0 - - - TPU_A Channel Priority Register 1 - - - - TPU_A Channel Interrupt Status Register - - - - TPU_A Link Register - - - - TPU_A Service Grant Latch Register - - - - - TPU_A Decoded Channel Number Register - - - - - TPU_A Module Configuration Register 2 - - - - - TPU_A Module Configuration Register 3 - - - - TPU_A Internal Scan Data Register - - - - TPU_A Internal Scan Control Register - - - - - - TPU3_B Module Configuration Register - - - - - TPU3_B Test Configuration Register - - - - - TPU3_B Development Support Control Register - - - - - TPU3_B Development Support Status Register - - - - - TPU3_B Interrupt Configuration Register - - - - - TPU3_B Channel Interrupt Enable Register - - - - - TPU3_B Channel Function Selection Register 0 - - - - - TPU3_B Channel Function Selection Register 1 - - - - - TPU3_B Channel Function Selection Register 2 - - - - - TPU_B Channel Function Selection Register 3 - - - - TPU_B Host Sequence Register 0 - - - TPU_B Host Sequence Register 1 - - - - TPU_B Host Service Request Register 0 - - - - - TPU_B Host Service Request Register 1 - - - - TPU_B Channel Priority Register 0 - - - TPU_B Channel Priority Register 1 - - - - TPU_B Channel Interrupt Status Register - - - - TPU_B Link Register - - - - TPU_B Service Grant Latch Register - - - - - TPU_B Decoded Channel Number Register - - - - - TPU_B Module Configuration Register 2 - - - - - TPU_B Module Configuration Register 3 - - - - TPU_B Internal Scan Data Register - - - - TPU_B Internal Scan Control Register - - - - - - - - - - QADC64 Module Configuration Register - - - - QADC64 Test Register - - - QADC64 Interrupt Register - - - Port A and Port B Data - - - - Port A Data and Port B Direction Register - - - - QADC64 Control Register 0 - - - QADC64 Control Register 1 - - - QADC64 Control Register 2 - - - QADC64 Status Register 0 - - - QADC64 Status Register 1 - - - - - QADC64 Module Configuration Register - - - - QADC64 Test Register - - - QADC64 Interrupt Register - - - Port A and Port B Data - - - - Port A Data and Port B Direction Register - - - - QADC64 Control Register 0 - - - QADC64 Control Register 1 - - - QADC64 Control Register 2 - - - QADC64 Status Register 0 - - - QADC64 Status Register 1 - - - - - - - - QSMCM Module Configuration Register - - - - QSMCM Test Register - - - Dual SCI Interrupt Level - - - Queued SPI Interrupt Level - - - SCI1Control Register 0 - - - SCI1Control Register 1 - - - SCI1 Status Register - - - SCI1 Data Register - - - QSMCM Port QS Data Register - - - - QSMCM Port QS PIn Assignment Register / QSMCM Port QS - Data Direction Register - - - - QSPI Control Register 0 - - - QSPI Control Register 1 - - - QSPI Control Register 2 - - - QSPI Control Register 3 - - - QSPI Status Register 3 - - - SCI2 Control Register 0 - - - SCI2 Control Register 1 - - - SCI2 Status Register - - - SCI2 Data Register - - - QSCI1 Control Register - - - QSCI1 Status Register - - - - - - - - MPWMSM0 Period Register - - - MPWMSM0 Pulse Register - - - MPWMSM0 Count Register - - - MPWMSM0 Status/Control Register - - - - MPWMSM1 Period Register - - - MPWMSM1 Pulse Register - - - MPWMSM1 Count Register - - - MPWMSM1 Status/Control Register - - - - MPWMSM2 Period Register - - - MPWMSM2 Pulse Register - - - MPWMSM2 Count Register - - - MPWMSM2 Status/Control Register - - - - MPWMSM3 Period Register - - - MPWMSM3 Pulse Register - - - MPWMSM3 Count Register - - - MPWMSM3 Status/Control Register - - - - MMCSM6 Up-Counter Register - - - MMCSM6 Modulus Latch Register - - - - MMCSM6 Status/Control Register Duplicated - - - - MMCSM6 Status/Control Register - - - - MDASM11 Data A Register - - - MDASM11 Data B Register - - - - MDASM11 Status/Control Register Duplicated - - - - MDASM11 Status/Control Register - - - - MDASM12 Data A Register - - - MDASM12 Data B Register - - - - MDASM12 Status/Control Register Duplicated - - - - MDASM12 Status/Control Register - - - - MDASM13 Data A Register - - - MDASM13 Data B Register - - - - MDASM13 Status/Control Register Duplicated - - - - MDASM13 Status/Control Register - - - - MDASM14 Data A Register - - - MDASM14 Data B Register - - - - MDASM14 Status/Control Register Duplicated - - - - MDASM14 Status/Control Register - - - - MDASM15 Data A Register - - - MDASM15 Data B Register - - - - MDASM15 Status/Control Register Duplicated - - - - MDASM15 Status/Control Register - - - - MPWMSM16 Period Register - - - MPWMSM16 Pulse Register - - - MPWMSM16 Count Register - - - MPWMSM16 Status/Control Register - - - - MPWMSM17 Period Register - - - MPWMSM17 Pulse Register - - - MPWMSM17 Count Register - - - MPWMSM17 Status/Control Register - - - - MPWMSM18 Period Register - - - MPWMSM18 Pulse Register - - - MPWMSM18 Count Register - - - MPWMSM18 Status/Control Register - - - - MPWMSM19 Period Register - - - MPWMSM19 Pulse Register - - - MPWMSM19 Count Register - - - MPWMSM19 Status/Control Register - - - - MMCSM22 Up-Counter Register - - - MMCSM22 Modulus Latch Register - - - - MMCSM22 Status/Control Register Duplicated - - - - MMCSM22 Status/Control Register - - - - MDASM27 Data A Register - - - MDASM27 Data B Register - - - - MDASM27 Status/Control Register Duplicated - - - - MDASM27 Status/Control Register - - - - MDASM28 Data A Register - - - MDASM28 Data B Register - - - - MDASM28 Status/Control Register Duplicated - - - - MDASM28 Status/Control Register - - - - MDASM29 Data A Register - - - MDASM29 Data B Register - - - - MDASM29 Status/Control Register Duplicated - - - - MDASM29 Status/Control Register - - - - MDASM30 Data A Register - - - MDASM30 Data B Register - - - - MDASM30 Status/Control Register Duplicated - - - - MDASM30 Status/Control Register - - - - MDASM31 Data A Register - - - MDASM31 Data B Register - - - - MDASM31 Status/Control Register Duplicated - - - - MDASM31 Status/Control Register - - - - MPIOSM Data Register - - - MPIOSM Data Direction Register - - - - - MIOS1 Test and Pin Control Register - - - - - MIOS1 Module Version Number Register - - - - MIOS1 Module Control Register - - - - MCPSM Status/Control Register - - - - MIRSM0 Interrupt Status Register - - - MIRSM0 Interrupt Enable Register - - - MIRSM0 Request Pending Register - - - - MIOS1 Interrupt Level Register 0 - - - - MIRSM1 Interrupt Status Register - - - MIRSM1 Interrupt Enable Register - - - MIRSM1 Request Pending Register - - - - MIOS1 Interrupt Level Register 1 - - - - - - - - - TouCAN_A Module Configuration Register - - - - TouCAN_A Test Register - - - - TouCAN_A Interrupt Configuration Register - - - - - TouCAN_A Control Register 0 / TouCAN_A Control Register - 1 - - - - - TouCAN_A Control and Prescaler Divider Register / - TouCAN_A Control Register 2 - - - - - TouCAN_A Free-Running Timer Register - - - - TouCAN_A Receive Global Mask High - - - TouCAN_A Receive Global Mask Low - - - - TouCAN_A Receive Buffer 14 Mask High - - - - - TouCAN_A Receive Buffer 14 Mask Low - - - - - TouCAN_A Receive Buffer 15 Mask High - - - - - TouCAN_A Receive Buffer 15 Mask Low - - - - - TouCAN_A Error and Status Register - - - - TouCAN_A Interrupt Masks - - - TouCAN_A Interrupt Flags - - - - TouCAN_A Receive Error Counter / TouCAN_A Transmit Error - Counter - - - - - - TouCAN_B Module Configuration Register - - - - TouCAN_B Test Register - - - - TouCAN_B Interrupt Configuration Register - - - - - TouCAN_B Control Register 0 / TouCAN_B Control Register - 1 - - - - - TouCAN_B Control and Prescaler Divider Register / - TouCAN_B Control Register 2 - - - - - TouCAN_B Free-Running Timer Register - - - - TouCAN_B Receive Global Mask High - - - TouCAN_B Receive Global Mask Low - - - - TouCAN_B Receive Buffer 14 Mask High - - - - - TouCAN_B Receive Buffer 14 Mask Low - - - - - TouCAN_B Receive Buffer 15 Mask High - - - - - TouCAN_B Receive Buffer 15 Mask Low - - - - - TouCAN_B Error and Status Register - - - - TouCAN_B Interrupt Masks - - - TouCAN_B Interrupt Flags - - - - TouCAN_B Receive Error Counter / TouCAN_B Transmit Error - Counter - - - - - - UIMB Module Configuration Register - - - - - Test Register — Reserved - - - Pending Interrupt Request Registe - - - - - - - - - SRAM_A Module Configuration Register - - - - SRAM_A Test Register - - - - - SRAM_B Module Configuration Register - - - - SRAM_B Test Register - - - - diff --git a/mcdp/scrapBook.jpage b/mcdp/scrapBook.jpage deleted file mode 100644 index 9ecc960..0000000 --- a/mcdp/scrapBook.jpage +++ /dev/null @@ -1,115 +0,0 @@ -short i = (short) 0x8613; -return i;(short) -31213 -++++++ -int i = -15; -System.out.println(i & 0xFF); -++++++ -int x; for (int i = -10000; i < 10000; i++) { - x = (i & 0xFF); - if (x < 0){ - System.out.println(i & 0xFF); - } -} -++++++ -int b = -15; -int c = (b & 0xFF); -System.out.println(c); -++++++ -byte b = (byte) 0x80; -b |= 0x40; -b |= 0x20; -System.out.println(b); -++++++ -int word = -1; // 0x00010000; -int shift = 27; -byte b = (byte) ((word >>> 21) & 0x0FF); -int i = (word >>> shift); -System.out.println(word + "\t" + shift); -System.out.println(b); -System.out.println(i); -++++++ -int word = 0xFF3; -byte b = (byte) ((word & 0x07) << 5); -System.out.println(b); -++++++ -System.out.println(64 >>> 1); -++++++ -int word = 0xFF0F0F0F; boolean lengthBit = false, controlBit = true; -byte b = (byte) 0x80; -if (lengthBit) { - b |= 0x40; -} -if (controlBit) { - b |= 0x20; -} b |= (byte) (word >>> 27); System.out.print(b + "\t"); -b = (byte) ((word >>> 19) & 0xFF); System.out.print(b + "\t"); -b = (byte) ((word >>> 11) & 0xFF); System.out.print(b + "\t"); -b = (byte) ((word >>> 3) & 0xFF); System.out.print(b + "\t"); -b = (byte) ((word & 0x07) << 5); System.out.println(b); -++++++ -byte[] data = new byte[5]; -data[0] = 0x00; data[1] = 0x00; data[2] = 0x00; data[3] = 0x29; data[4] = (byte) 0x80; -int retValue = ((data[0] << 3) + ((data[1] & 0xFF) >>> 5)) << 24; -System.out.println("0x" + Integer.toHexString(retValue)); -// second byte -retValue += (((data[1] << 3) & 0xFF) + ((data[2] & 0xFF) >>> 5)) << 16; -System.out.println("0x" + Integer.toHexString(retValue)); -// third byte -retValue += (((data[2] << 3) & 0xFF) + ((data[3] & 0xFF) >>> 5)) << 8; -System.out.println("0x" + Integer.toHexString(retValue)); -// fourth byte -retValue += ((data[3] << 3) & 0xFF) + ((data[4] & 0xFF) >>> 5); -System.out.println("0x" + Integer.toHexString(retValue)); -++++++ -byte b = 0x7D; -System.out.println((b & 0x80)); -++++++ -int i1 = 0x12345678, i2 = 0x56789012; -long l = ((long) i1 << 32) + i2; -System.out.println(Long.toHexString(l)); -++++++ -int val = 5; -for (int i = 0; i <= 7; i++) { - int cmd = 0xFC00010C + (7 - i) * 0x800000 + ((val >>> i*4) & 0xF)*0x1000; - System.out.println(i + "\t0x" + Integer.toHexString(cmd)); -} -++++++ -System.out.println("0x" + Integer.toHexString((0x20 << 3) & 0xFF)); -++++++ -int data = 0x1111; -byte b; -b = (byte) ((data >>> 9) & 0xFF); -System.out.println("0x" + Integer.toHexString(b)); -b = (byte) ((data >>> 1) & 0xFF); -System.out.println("0x" + Integer.toHexString(b)); -b = (byte) ((data & 0x01) << 7); -System.out.println("0x" + Integer.toHexString(b)); -++++++ -byte[] data = new byte[3]; -data[0] = (byte) 0xFF; data[1] = 0x01; data[2] = 0x00; -byte b = 0; -for (int bit = 0; bit <= 7; bit++) { - if ((data[1] & (1 << bit)) > 0) { - b += 1 << (7 - bit); - } -} -int retValue = (b & 0xFF) << 8; -// turn LSB -b = 0; -for (int bit = 0; bit <= 7; bit++) { - if ((data[0] & (1 << bit)) > 0) { - b += 1 << (7 - bit); - } -} -retValue += (b & 0xFF); -System.out.println("0x" + Integer.toHexString(retValue)); -++++++ -System.out.println(((512 - 6) / 2) & 0xFFFC); -++++++ -int MR30TSPR = 0x7FC003A6; -int spr = 158; -System.out.println(((spr & 0x1F) * 0x20 + (spr >>> 5)) * 0x800 + MR30TSPR); -+++++++ -int val = 0xFFFFFA00; -System.out.println("0x" + Integer.toHexString(val >>> 16)); -System.out.println("0x" + Integer.toHexString(val & 0xFFFF)); diff --git a/mcdp/src/ch/ntb/mcdp/bdi/BDIException.java b/mcdp/src/ch/ntb/mcdp/bdi/BDIException.java deleted file mode 100644 index df2c516..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/BDIException.java +++ /dev/null @@ -1,14 +0,0 @@ -package ch.ntb.mcdp.bdi; - -public class BDIException extends Exception { - - public BDIException(String string) { - super(string); - } - - /** - * - */ - private static final long serialVersionUID = -3800838568826846479L; - -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/MC68332.java b/mcdp/src/ch/ntb/mcdp/bdi/MC68332.java deleted file mode 100644 index fa4f11d..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/MC68332.java +++ /dev/null @@ -1,1065 +0,0 @@ -package ch.ntb.mcdp.bdi; - -import ch.ntb.mcdp.usb.DataPacket; -import ch.ntb.mcdp.usb.Dispatch; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.Device; -import ch.ntb.usb.USB; -import ch.ntb.usb.USBException; - -/** - * Represents the Background Debugging Interface of the MC68332 microcontroller. - * - * @author schlaepfer - * - */ -public class MC68332 { - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi; - - // BDI subtypes - /** - * 17 Bit Packet to BDI - */ - private static final byte STYPE_BDI_17IN = 0x10; - - /** - * 17 Bit Packet from BDI - */ - private static final byte STYPE_BDI_17OUT = 0x11; - - /** - * Fast Download Data to download to target (Fill) - */ - private static final byte STYPE_BDI_17FILL_BYTE_WORD = 0x12; - - /** - * Fast Download Data to download to target (Fill) - */ - private static final byte STYPE_BDI_17FILL_LONG = 0x13; - - /** - * Dump target memory (Dump) - */ - private static final byte STYPE_BDI_17DUMP = 0x14; - - /** - * Hard Reset - */ - private static final byte STYPE_BDI_HARD_RESET_332 = 0x07; - - /** - * Get status of Freeze-Signal - */ - private static final byte STYPE_BDI_GET_FREEZE = 0x08; - - /** - * Fast Download successfully finished (Fill) - */ - private static final byte STYPE_BDI_SUCCESS_FD = 0x60; - - /** - * HARD_RESET done - */ - private static final byte STYPE_BDI_HARD_RESET_SUCCESS = 0x61; - - /** - * Freeze-Signal status (length = 1 byte) - */ - private static final byte STYPE_BDI_FREEZE_RESULT = 0x62; - - /** - * Fast Download Data received from target (Dump) - */ - private static final byte STYPE_BDI_DUMP_DATA = 0x63; - - /** - * Unknown STYPE - */ - private static final byte STYPE_BDI_UNKNOWN_STYPE = 0x70; - - /** - * Error if length in FD (Fast Download) packet too small - */ - private static final byte STYPE_BDI_ERROR_FD_LENGTH = 0x71; - - /** - * General FD Error - */ - private static final byte STYPE_BDI_ERROR_FD_GENERAL = 0x72; - - /** - * Dump error - */ - private static final byte STYPE_BDI_DUMP_ERROR = 0x74; - - /** - * data length in bytes - */ - private static final int BDI_DATA17_LENGTH = 3; - - /** - * no operation - */ - private static final int NOP = 0x0000; - - /** - * asserts RESET for 512 clock cycles (CPU is not affected) - */ - private static final int RST = 0x0400; - - /** - * resume execution - */ - private static final int GO = 0x0C00; - - /** - * read data register - */ - private static final int RDREG = 0x2180; - - /** - * write data register - */ - private static final int WDREG = 0x2080; - - /** - * read system register - */ - private static final int RSREG = 0x2580; - - /** - * write system register - */ - private static final int WSREG = 0x2480; - - /** - * write memory byte - */ - private static final int WRITEB = 0x1800; - - /** - * write memory word - */ - private static final int WRITEW = 0x1840; - - /** - * write memory long - */ - private static final int WRITEL = 0x1880; - - /** - * read memory byte - */ - private static final int READB = 0x1900; - - /** - * read memory word - */ - private static final int READW = 0x1940; - - /** - * read memory long - */ - private static final int READL = 0x1980; - - /** - * fill memory byte - */ - private static final int FILLB = 0x1C00; - - /** - * fill memory word - */ - private static final int FILLW = 0x1C40; - - /** - * fill memory long - */ - private static final int FILLL = 0x1C80; - - /** - * dump memory long - */ - private static final int DUMPB = 0x1D00; - - /** - * dump memory long - */ - private static final int DUMPW = 0x1D40; - - /** - * dump memory long - */ - private static final int DUMPL = 0x1D80; - - /** - * BDI return Code: Command Complete; Status OK - */ - private static final int STATUS_OK = 0xFFFF; - - /** - * Maximal number of words or bytes (1 or 2 bytes) for one usb-packet to - * download (fill). - */ - private int maxNofBytesWordsFill; - - /** - * Maximal number of longs (4 bytes) for one usb-packet to download (fill).
- */ - private int maxNofLongsFill; - - /** - * Maximal number of words or bytes (1 or 2 bytes) to dump in one - * usb-packet. - */ - private int maxNofBytesWordsDump; - - /** - * Maximal number of longs (4 bytes) to dump in one usb-packet. - */ - private int maxNofLongsDump; - - /** - * The last known state on the freeze signal. - */ - private boolean targetInDebugMode = false; - - /** - * Temporary buffer of the data to send. - */ - private byte[] sendData; - - /** - * Sizes which are setup up when writing or reading memory data. This values - * are used in fillMem and dumpMem. - */ - private int readMemSize, writeMemSize; - - /** - * The USB device to connect to. - */ - private Device device; - - /** - * @param device - * The USB device to connect to. Before using any methods which - * communicate with the device, the device must be connected. - */ - public MC68332(Device device) { - readMemSize = 0; - writeMemSize = 0; - sendData = new byte[USB.HIGHSPEED_MAX_BULK_PACKET_SIZE]; - this.device = device; - } - - /** - * Transmit a packet to the USB-target. The length transmitted over USB is - * dataLength + DataPacket.PACKET_MIN_LENGTH. - * - * @param STYPE - * subtype of the packet STYPE_BDI_* - * @param dataLength - * length of the data to be sent - * @return resulting response from target - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - private DataPacket transmit(byte STYPE, int dataLength) - throws USBException, DispatchException, BDIException { - // initialize packet - sendData[0] = DataPacket.PACKET_HEADER; - sendData[1] = Dispatch.MTYPE_BDI; - sendData[2] = STYPE; - sendData[3] = (byte) (dataLength / 0x100); // length - sendData[4] = (byte) (dataLength & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + dataLength] = DataPacket.PACKET_END; - - // write USB-command - USBDevice - .write_BDI(sendData, dataLength + DataPacket.PACKET_MIN_LENGTH); - - // read result - DataPacket data = Dispatch.readBDI(); - if (data.subtype == STYPE_BDI_UNKNOWN_STYPE) { - throw new BDIException("unknown subtype: " + data.subtype); - } - return data; - } - - /** - * Inserts 17-bits of data (3 bytes) into the send bufferList. - * - * @param data - * 17 bits (3 bytes) of data - * @param offset - * the offset from the beginning of the data - */ - private void fillPacket(int data, int offset) { - - // refer to CPU32 Reference Manual, Section 7.2.7 - // bit16 = 0 + 16 bits of data (MSB .. LSB) - sendData[DataPacket.PACKET_DATA_OFFSET + offset] = (byte) ((data >>> 9) & 0x7F); - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 1] = (byte) ((data >>> 1) & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 2] = (byte) ((data & 0x01) << 7); - } - - /** - * Send one BDI instruction (17 bits) to the target without any other data. - * - * @param data - * BDI instruction - * @return resulting response from target - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public DataPacket transfer(int data) throws USBException, - DispatchException, BDIException { - - fillPacket(data, 0); - - return transmit(STYPE_BDI_17IN, BDI_DATA17_LENGTH); - } - - /** - * Checks the result for error conditions and converts the byte data to an - * integer. - * - * @param data - * DataPacket to be parsed - * @return data received from the target as an integer - * @throws BDIException - * @throws USBException - * @throws DispatchException - */ - private int parseResult17(DataPacket data, int offset) throws BDIException, - USBException, DispatchException { - if ((data.subtype != STYPE_BDI_17OUT) - && (data.subtype != STYPE_BDI_DUMP_DATA)) { - throw new BDIException("wrong subtype: " + data.subtype); - } - boolean statusControlBit = (data.data[0 + offset] & 0x80) > 0; - int retValue = (((data.data[0 + offset] << 1) & 0xFF) + ((data.data[1 + offset] & 0x80) >>> 7)) << 8; - retValue += ((data.data[1 + offset] << 1) & 0xFF) - + ((data.data[2 + offset] & 0x80) >>> 7); - - if (statusControlBit) { - switch (retValue) { - case 0x0000: - // Not Ready - return 0; - case 0x0001: - // Data Invalid - throw new BDIException( - "BERR Terminated Bus Cycle; Data Invalid"); - case 0xFFFF: - // Illegal Command - throw new BDIException("Illegal Command"); - default: - // invalid case - throw new BDIException("invalid case: 0x" - + Integer.toHexString(retValue)); - } - } - // retValue = 0xxxxx -> Valid Data Transfer - // retValue = 0xFFFF -> Command Complete; Status OK - return retValue; - } - - /** - * Combines the transfer(int data) and - * parseResult17(DataPacket data) methods.
- * Use this for a normal BDI transfer. - * - * @param data - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - private int transferAndParse17(int data) throws USBException, - DispatchException, BDIException { - return parseResult17(transfer(data), 0); - } - - /** - * Sends NOPs to the target until a STATUS_OK result is - * received. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void nopsToLegalCmd() throws USBException, DispatchException, - BDIException { - final int NOF_NOPS_TO_LEGAL_CMD = 4; - for (int i = 0; i < NOF_NOPS_TO_LEGAL_CMD; i++) { - if (transferAndParse17(NOP) == STATUS_OK) { - return; - } - } - throw new BDIException("timeout, tried " + NOF_NOPS_TO_LEGAL_CMD - + " times"); - } - - /** - * Signals a breakpoint and enters debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void break_() throws USBException, DispatchException, BDIException { - if (transferAndParse17(NOP) != STATUS_OK) { - throw new BDIException("no STATUS_OK received"); - } - targetInDebugMode = isFreezeAsserted(); - } - - /** - * Resume from debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void go() throws USBException, DispatchException, BDIException { - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - transferAndParse17(GO); - targetInDebugMode = isFreezeAsserted(); - } - - /** - * Send a command to reset the microcontroller.
- * The reset is done electrically by the USB-controller. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - private void hard_reset() throws USBException, DispatchException, - BDIException { - DataPacket data = transmit(STYPE_BDI_HARD_RESET_332, 0); - if (data == null) { - throw new BDIException("no data from device"); - } - if (data.subtype != STYPE_BDI_HARD_RESET_SUCCESS) { - throw new BDIException("wrong subtype: " + data.subtype); - } - } - - /** - * Reset the target and put it into debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void reset_target() throws USBException, DispatchException, - BDIException { - // hard reset - hard_reset(); - // break - break_(); - } - - /** - * Send the RST command (reset peripherals) to the microcontroller. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void reset_peripherals() throws USBException, DispatchException, - BDIException { - // hard reset - transferAndParse17(RST); - // wait for 50ms - try { - Thread.sleep(50); - } catch (InterruptedException e) { - e.printStackTrace(); - } - // break - break_(); - } - - /** - * Check if the freeze signal is asserted.
- * The freeze siganl is asserted if the target is in debug mode. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public boolean isFreezeAsserted() throws USBException, DispatchException, - BDIException { - DataPacket data = transmit(STYPE_BDI_GET_FREEZE, 0); - if (data == null) { - throw new BDIException("no data from device"); - } - if (data.subtype != STYPE_BDI_FREEZE_RESULT) { - throw new BDIException("wrong subtype: " + data.subtype); - } - if ((data.data[0] != 0) && (data.data[0] != 1)) { - throw new BDIException("wrong data: " + data.data[0]); - } - targetInDebugMode = data.data[0] == 1; - return targetInDebugMode; - } - - /** - * Update the internal maximal values for the fill and - * dump commands. - */ - private void updateMaxValues() { - // update the values (now the device should be connected) - if ((maxNofLongsFill <= 0) | (maxNofBytesWordsFill <= 0) - | (maxNofBytesWordsDump <= 0) | (maxNofLongsDump <= 0)) { - maxNofBytesWordsDump = (device.getMaxPacketSize() - - DataPacket.PACKET_MIN_LENGTH - 3/* NOP */) / 3; - maxNofBytesWordsFill = (device.getMaxPacketSize() - - DataPacket.PACKET_MIN_LENGTH - 3) / 6; - maxNofLongsDump = maxNofBytesWordsFill; - maxNofLongsFill = (device.getMaxPacketSize() - - DataPacket.PACKET_MIN_LENGTH - 3) / 9; - logger.finer("update maxNofLongs: " + maxNofLongsFill - + ", maxNofBytesWords: " + maxNofBytesWordsFill); - } - } - - /** - * Fill large blocks of memory.
- * Fill is used in conjunction with the writeMem command. The - * maximal number of words is defined by - * MAX_NOF_WORDS_FAST_DOWNLOAD for 1 and 2 byte (word) data. - * For 4 byte (long) data, only half the size of - * MAX_NOF_WORDS_FAST_DOWNLOAD is available as 4 bytes of - * data has to be split in two packets (2 x 3 bytes).
- * Befor using fillMem, writeMem has to be - * called to set up the start address and size. - * - * @param downloadData - * Data to be downloaded (size depending on size set up with - * writeMem) - * @param dataLength - * Number of bytes, words or longs (1, 2, 4 bytes) - * @throws BDIException - * @throws DispatchException - * @throws USBException - */ - public void fillMem(int[] downloadData, int dataLength) - throws BDIException, USBException, DispatchException { - // check if data fits into USB-packet - int currentIndex = 0; - DataPacket data; - logger.finer("dataLength: " + dataLength); - updateMaxValues(); - switch (writeMemSize) { - case 1: - if (dataLength > maxNofBytesWordsFill) { - throw new BDIException("data length (" + dataLength - + ") larger than maxNofBytesWords (" - + maxNofBytesWordsFill + ")"); - } - while (currentIndex < dataLength) { - // FILLB - fillPacket(FILLB, currentIndex * 6); - // DATA - fillPacket(downloadData[currentIndex] & 0xFF, - currentIndex * 6 + 3); - currentIndex++; - } - // send NOP to get result of last write - fillPacket(NOP, currentIndex * 6); - data = transmit(STYPE_BDI_17FILL_BYTE_WORD, dataLength * 6 + 3); - break; - case 2: - if (dataLength > maxNofBytesWordsFill) { - throw new BDIException("data length (" + dataLength - + ") larger than maxNofBytesWords (" - + maxNofBytesWordsFill + ")"); - } - while (currentIndex < dataLength) { - // FILLW - fillPacket(FILLW, currentIndex * 6); - // DATA - fillPacket(downloadData[currentIndex], currentIndex * 6 + 3); - currentIndex++; - } - // send NOP to get result of last write - fillPacket(NOP, currentIndex * 6); - data = transmit(STYPE_BDI_17FILL_BYTE_WORD, dataLength * 6 + 3); - break; - case 4: - if (dataLength > (maxNofLongsFill)) { - throw new BDIException("data length (" + dataLength - + ") larger than maxNofLongs (" + maxNofLongsFill + ")"); - } - while (currentIndex < dataLength) { - // FILLL - fillPacket(FILLL, currentIndex * 9); - // MS data - fillPacket((downloadData[currentIndex] >>> 16), - currentIndex * 9 + 3); - // LS data - fillPacket(downloadData[currentIndex], currentIndex * 9 + 6); - currentIndex++; - } - // send NOP to get result of last write - fillPacket(NOP, currentIndex * 9); - data = transmit(STYPE_BDI_17FILL_LONG, dataLength * 9 + 3); - logger.fine("FILL: Transmit: " + (dataLength * 9 + 3)); - break; - default: - throw new BDIException("invalid writeMemSize: " + writeMemSize); - } - - if (data == null) { - throw new BDIException("no data from device"); - } - - switch (data.subtype) { - case STYPE_BDI_SUCCESS_FD: - break; - case STYPE_BDI_ERROR_FD_LENGTH: - System.out.println("0x" - + Integer.toHexString(((data.data[0] & 0xff) << 8) - + (data.data[1] & 0xff))); - throw new BDIException("length smaller than BDI_DATA17_LENGTH"); - case STYPE_BDI_ERROR_FD_GENERAL: - System.out.println("0x" - + Integer.toHexString(((data.data[0] & 0xff) << 8) - + (data.data[1] & 0xff))); - throw new BDIException("general fast download error"); - default: - throw new BDIException("wrong subtype: " + data.subtype); - } - } - - /** - * Dump large blocks of memory.
- * Dump is used in conjunction with the readMem(...) command. - * The size depends on the size set up with readMem(...) and - * is internally stored. - * - * @param nofData - * number of bytes/words/longs to read (depends on the size set - * up with readMem(...)) - * @return read values - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int[] dumpMem(int nofData) throws USBException, DispatchException, - BDIException { - - updateMaxValues(); - int dataSize; - switch (readMemSize) { - case 1: - if (nofData > maxNofBytesWordsFill) - nofData = maxNofBytesWordsFill; - // fill the packet with {DUMPB} + 1 NOP at the end - int i; - for (i = 0; i < nofData; i++) { - fillPacket(DUMPB, i * 3); - } - fillPacket(NOP, i * 3); - dataSize = i * 3 + 3; - break; - case 2: - if (nofData > maxNofBytesWordsFill) - nofData = maxNofBytesWordsFill; - // fill the packet with {DUMPW} + 1 NOP at the end - for (i = 0; i < nofData; i++) { - fillPacket(DUMPW, i * 3); - } - fillPacket(NOP, i * 3); - dataSize = i * 3 + 3; - break; - case 4: - if (nofData > maxNofLongsFill) - nofData = maxNofLongsFill; - // fill the packet with {DUMPL + NOP} + 1 NOP at the end - for (i = 0; i < nofData; i++) { - fillPacket(DUMPL, i * 6); - fillPacket(NOP, i * 6 + 3); - } - fillPacket(NOP, i * 6); - dataSize = i * 6 + 3; - break; - default: - throw new BDIException("invalid readMemSize: " + readMemSize); - } - - DataPacket res = transmit(STYPE_BDI_17DUMP, dataSize); - /* - * The status of each transfer is checked on the USB-Controller. If an - * error occurs, a STYPE_BDI_DUMP_ERROR packet is returned. - */ - if (res == null) { - throw new BDIException("no data from device"); - } - - int[] result; - switch (res.subtype) { - case STYPE_BDI_DUMP_DATA: - switch (readMemSize) { - case 1: - case 2: - result = new int[(res.data.length) / 3]; - // MS Result before LS Result - int resIndex = 0; - while (resIndex * 3 + 3 < res.data.length) { - result[resIndex] = parseResult17(res, resIndex * 3); - resIndex++; - } - return result; - case 4: - result = new int[(res.data.length) / 6]; - // MS Result before LS Result - resIndex = 0; - while (resIndex * 6 + 6 < res.data.length) { - // MS Result - result[resIndex] = parseResult17(res, resIndex * 6) << 16; - // LS Result - result[resIndex] += parseResult17(res, resIndex * 6 + 3); - resIndex++; - } - return result; - // the default case is handled above - } - case STYPE_BDI_DUMP_ERROR: - // throws BDI exceptions, but not for "Not Ready" - throw new BDIException("STYPE_BDI_DUMP_ERROR"); - default: - throw new BDIException("wrong subtype: " + res.subtype); - } - } - - /** - * Write to a specified memory address.
- * - * @param addr - * address to write - * @param value - * value to write - * @param size - * number of bytes to read - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeMem(int addr, int value, int size) throws USBException, - DispatchException, BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - logger.info("addr: 0x" + Integer.toHexString(addr >>> 16) + " 0x" - + Integer.toHexString(addr & 0xFFFF) + "\tvalue: 0x" - + Integer.toHexString(value >>> 16) + " 0x" - + Integer.toHexString(value & 0xFFFF)); - - writeMemSize = size; - switch (size) { - case 1: - // put instr. - transferAndParse17(WRITEB); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // put data (byte) - transferAndParse17(value & 0xFFFF); - break; - case 2: - // put instr. - transferAndParse17(WRITEW); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // put data (word) - transferAndParse17(value & 0xFFFF); - break; - case 4: - // put instr. - transferAndParse17(WRITEL); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // put MS data (long) - transferAndParse17(value >>> 16); - // put LS data (long) - transferAndParse17(value & 0xFFFF); - break; - default: - writeMemSize = 0; - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4)"); - } - // check status - if (transferAndParse17(NOP) != STATUS_OK) { - // throw new BDIException("error on writeMem"); - } - } - - /** - * Read the value of a specified memory address.
- * - * @param addr - * address to read - * @param size - * number of bytes to read - * @return value of this memory address - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readMem(int addr, int size) throws USBException, - DispatchException, BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - logger.info("addr: 0x" + Integer.toHexString(addr >>> 16) + " 0x" - + Integer.toHexString(addr & 0xFFFF)); - - readMemSize = size; - switch (size) { - case 1: - // put instr. - transferAndParse17(READB); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // get data (byte) - return transferAndParse17(NOP); - case 2: - // put instr. - transferAndParse17(READW); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // get data (word) - return transferAndParse17(NOP); - case 4: - // put instr. - transferAndParse17(READL); - // put MS ADDR - transferAndParse17(addr >>> 16); - // put LS ADDR - transferAndParse17(addr & 0xFFFF); - // get MS data (long) - int valMS = transferAndParse17(NOP); - // get LS data (long) - return (valMS << 16) + transferAndParse17(NOP); - default: - readMemSize = 0; - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4 bytes)"); - } - } - - /** - * Read a specified value from a user register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to read - * @return value of register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readUserReg(int reg) throws USBException, DispatchException, - BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. - transferAndParse17(RDREG + (reg & 0x0F)); - // get MS data (long) - int valMS = transferAndParse17(NOP); - // get LS data (long) - return (valMS << 16) + transferAndParse17(NOP); - } - - /** - * Write a specified value to user register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to write - * @param value - * value to write to register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeUserReg(int reg, int value) throws USBException, - DispatchException, BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. - transferAndParse17(WDREG + (reg & 0x0F)); - // put MS data (long) - transferAndParse17(value >>> 16); - // put LS data (long) - transferAndParse17(value); - // check status - if (transferAndParse17(NOP) != STATUS_OK) { - throw new BDIException("error on writeUserReg"); - } - } - - /** - * Read a specified value from a system register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to read - * @return value of register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readSysReg(int reg) throws USBException, DispatchException, - BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. - transferAndParse17(RSREG + (reg & 0x0F)); - // get MS data (long) - int valMS = transferAndParse17(NOP); - // get LS data (long) - return (valMS << 16) + transferAndParse17(NOP); - } - - /** - * Write a specified value to system register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to write - * @param value - * value to write to register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeSysReg(int reg, int value) throws USBException, - DispatchException, BDIException { - - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - logger.info("register: 0x" + Integer.toHexString(reg) + ", value: " - + "0x" + Integer.toHexString(value) + "\tinstructions: 0x" - + Integer.toHexString(WSREG + (reg & 0xF)) + " 0x" - + Integer.toHexString(value >>> 16) + ", 0x" - + Integer.toHexString(value)); - - // put instr. - transferAndParse17(WSREG + (reg & 0x0F)); - // put MS data (long) - transferAndParse17(value >>> 16); - // put LS data (long) - transferAndParse17(value); - // check status - if (transferAndParse17(NOP) != STATUS_OK) { - throw new BDIException("error on writeUserReg"); - } - } - - /** - * Return the last known state of the freeze signal.
- * This value may not be up to date as the target state may have changed - * meanwhile. To get the up to date value use isFreezeAsserted - * which will issue an USB request, read the freeze signal and update the - * internal value returned by this method. - * - * @return the last known state of the freeze signal - */ - public boolean isTargetInDebugMode() { - return targetInDebugMode; - } - - /** - * Maximal number of words or bytes (1 or 2 bytes) for one usb-packet to - * download (fill).
- * This method will only return a valid result, if the USB device is - * connected. - * - * @return - */ - public int getMaxNofBytesWordsFill() { - updateMaxValues(); - return maxNofBytesWordsFill; - } - - /** - * Maximal number of longs (4 bytes) for one usb-packet to download (fill) - * or read (dump).
- * This method will only return a valid result, if the USB device is - * connected. - * - * @return - */ - public int getMaxNofLongsFill() { - updateMaxValues(); - return maxNofLongsFill; - } - - /** - * Maximal number of words or bytes (1 or 2 bytes) to dump in one - * usb-packet.
- * This method will only return a valid result, if the USB device is - * connected. - * - * @return - */ - public int getMaxNofBytesWordsDump() { - updateMaxValues(); - return maxNofBytesWordsDump; - } - - /** - * Maximal number of longs (4 bytes) for one usb-packet to download (fill) - * or read (dump).
- * This method will only return a valid result, if the USB device is - * connected. - * - * @return - */ - public int getMaxNofLongsDump() { - updateMaxValues(); - return maxNofLongsDump; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/MPC555.java b/mcdp/src/ch/ntb/mcdp/bdi/MPC555.java deleted file mode 100644 index 8be821f..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/MPC555.java +++ /dev/null @@ -1,1179 +0,0 @@ -package ch.ntb.mcdp.bdi; - -import ch.ntb.mcdp.usb.DataPacket; -import ch.ntb.mcdp.usb.Dispatch; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.Device; -import ch.ntb.usb.USB; -import ch.ntb.usb.USBException; - -/** - * Represents the Background Debugging Interface of the MPC555 microcontroller. - * - * @author schlaepfer - * - */ -public class MPC555 { - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi; - - // BDI subtypes - /** - * 35 Bit Packet to BDI - */ - private static final byte STYPE_BDI_35IN = 0x01; - - /** - * 35 Bit Packet from BDI - */ - private static final byte STYPE_BDI_35OUT = 0x02; - - /** - * Fast Download Data - */ - private static final byte STYPE_BDI_35FD_DATA = 0x05; - - /** - * Hard Reset - */ - private static final byte STYPE_BDI_HARD_RESET_555 = 0x06; - - /** - * Get status of Freeze-Signal - */ - private static final byte STYPE_BDI_GET_FREEZE = 0x08; - - /** - * Fast Download successfully finished - */ - private static final byte STYPE_BDI_SUCCESS_FD = 0x60; - - /** - * HARD_RESET done - */ - private static final byte STYPE_BDI_HARD_RESET_SUCCESS = 0x61; - - /** - * Freeze-Signal status (length = 1 byte) - */ - private static final byte STYPE_BDI_FREEZE_RESULT = 0x62; - - /** - * Unknown STYPE - */ - private static final byte STYPE_BDI_UNKNOWN_STYPE = 0x70; - - /** - * Error if length in FD (Fast Download) packet too small - */ - private static final byte STYPE_BDI_ERROR_FD_LENGTH = 0x71; - - /** - * General FD Error - */ - private static final byte STYPE_BDI_ERROR_FD_GENERAL = 0x72; - - /** - * General FD Error - */ - private static final byte STYPE_BDI_ERROR_TIMEOUT = 0x73; - - /** - * number of bytes per BDI transfer (35 bits) - */ - private static final int BDI_DATA35_LENGTH = 5; - - /** - * no operation, nop = ori 0,0,0 - */ - private static final int NOP = 0x60000000; - - /** - * return from interrupt - */ - private static final int RFI = 0x4C000064; - - /** - * mtspr DPDR, Rx - */ - private static final int MRTDPDR = 0x7C169BA6; - - /** - * mfspr Rx, DPDR - */ - private static final int MDPDRTR = 0x7C169AA6; - - /** - * mtspr spr, R30 - */ - private static final int MR30TSPR = 0x7FC003A6; - - /** - * mfspr R30, spr - */ - private static final int MSPRTR30 = 0x7FC002A6; - - /** - * mftbr R30, tbr - */ - private static final int MTBRTR30 = 0x7FC002E6; - - /** - * Null indication result of a BDI transaction - */ - private static final int NULL_INDICATION = -1; - - /** - * Maximal number of wordsfor one usb-packet to download (fastDownload). - */ - private int maxNofWordsFastDownload; - - /** - * Internal state whether the fast download procedure has been started. - */ - private boolean fastDownloadStarted; - - /** - * The last known state on the freeze signal. - */ - private boolean targetInDebugMode; - - /** - * Temporary buffer of the data to send. - */ - private byte[] sendData; - - /** - * Temporary register values (see epilogue and - * prologue). - */ - private int gpr30, gpr31, ecr; - - /** - * The USB device to connect to. - */ - private Device device; - - /** - * @param device - * The USB device to connect to. Before using any methods which - * communicate with the device, the device must be connected. - */ - public MPC555(Device device) { - targetInDebugMode = false; - fastDownloadStarted = false; - this.device = device; - sendData = new byte[USB.HIGHSPEED_MAX_BULK_PACKET_SIZE]; - } - - /** - * Initialize an USB packet. - * - * @param STYPE - * the subtype - * @param dataLength - * length of the data contained in the packet (not the length of - * the USB packet). - */ - private void initPacket(byte STYPE, int dataLength) { - logger.finest("initPacket(0x" + Integer.toHexString(STYPE) + ", " - + dataLength + ")"); - sendData[0] = DataPacket.PACKET_HEADER; - sendData[1] = Dispatch.MTYPE_BDI; - sendData[2] = STYPE; - sendData[3] = (byte) (dataLength / 0x100); // length - sendData[4] = (byte) (dataLength & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + dataLength] = DataPacket.PACKET_END; - } - - /** - * Transmit an USB packet and receive the result. - * - * @param dataLength - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - private DataPacket transmit(int dataLength) throws USBException, - DispatchException, BDIException { - // write USB-command - USBDevice - .write_BDI(sendData, dataLength + DataPacket.PACKET_MIN_LENGTH); - - // read result - DataPacket data = Dispatch.readBDI(); - if (data.subtype == STYPE_BDI_UNKNOWN_STYPE) { - throw new BDIException("unknown subtype: " + data.subtype); - } else if (data.subtype == STYPE_BDI_ERROR_TIMEOUT) { - // receive invalid packet - Dispatch.readBDI(); - throw new BDIException("timeout error (DSDO not low)"); - } - return data; - } - - /** - * - * - * @param modeBit - * @param controlBit - * @param data - * @param offset - */ - private void fillPacket(boolean modeBit, boolean controlBit, int data, - int offset) { - - // startBit = 1 | modeBit | controlBit | 32 bits of data - byte b = (byte) 0x80; - if (modeBit) { - b |= 0x40; - } - if (controlBit) { - b |= 0x20; - } - b |= (byte) (data >>> 27); - sendData[DataPacket.PACKET_DATA_OFFSET + offset] = b; - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 1] = (byte) ((data >>> 19) & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 2] = (byte) ((data >>> 11) & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 3] = (byte) ((data >>> 3) & 0xFF); - sendData[DataPacket.PACKET_DATA_OFFSET + offset + 4] = (byte) ((data & 0x07) << 5); - } - - private DataPacket transfer(boolean modeBit, boolean controlBit, int data) - throws USBException, DispatchException, BDIException { - - initPacket(STYPE_BDI_35IN, BDI_DATA35_LENGTH); - - fillPacket(modeBit, controlBit, data, 0); - - return transmit(BDI_DATA35_LENGTH); - } - - private int parseResult35(DataPacket data) throws BDIException { - if (data.subtype != STYPE_BDI_35OUT) { - throw new BDIException("wrong subtype: " + data.subtype); - } - // 1 bit is always 0 (Ready Bit) - // 2 + 3 bit are status bits - // 32 data bits - if ((data.data[0] & 0x80) > 0) { - throw new BDIException("ready bit is not 0: 0x" - + Integer.toHexString(data.data[0] & 0xFF)); - } - // status[0:1] - switch ((data.data[0] >>> 5) & 0x03) { - // for status 1 to 3, the first bit (after status) indicates the freeze - // status, and the second bit if a download procedure is in progress - case 0: - // first byte - int retValue = (((data.data[0] << 3) & 0xFF) + ((data.data[1] & 0xFF) >>> 5)) << 24; - // second byte - retValue += (((data.data[1] << 3) & 0xFF) + ((data.data[2] & 0xFF) >>> 5)) << 16; - // third byte - retValue += (((data.data[2] << 3) & 0xFF) + ((data.data[3] & 0xFF) >>> 5)) << 8; - // fourth byte - retValue += ((data.data[3] << 3) & 0xFF) - + ((data.data[4] & 0xFF) >>> 5); - return retValue; - case 1: - // update freeze status - targetInDebugMode = (data.data[0] & 0x10) > 0; - logger.finer("targetInDebugMode: " + targetInDebugMode); - throw new BDIException("Sequencing Error: " + data.toString()); - case 2: - // update freeze status - targetInDebugMode = (data.data[0] & 0x10) > 0; - logger.finer("targetInDebugMode: " + targetInDebugMode); - throw new BDIException("CPU Exception: " + data.toString()); - case 3: - // update freeze status - targetInDebugMode = (data.data[0] & 0x10) > 0; - logger.finer("targetInDebugMode: " + targetInDebugMode); - return NULL_INDICATION; - default: - throw new BDIException("invalid case"); - } - } - - private int transferAndParse35(boolean modeBit, boolean controlBit, int data) - throws USBException, DispatchException, BDIException { - return parseResult35(transfer(modeBit, controlBit, data)); - } - - private void epilogue() throws USBException, DispatchException, - BDIException { - - logger.fine("epilogue()"); - - // restore GPR30 - // put instr mfspr: GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put GPR30 in DPDR - logger.finer("write gpr30: 0x" + Integer.toHexString(gpr30)); - transferAndParse35(false, true, gpr30); - - // restore GPR31 - // put instr. mfspr: GPR31, DPDR - transferAndParse35(false, false, 0x7FF69AA6); - // put GPR31 in DPDR - logger.finer("write gpr31: 0x" + Integer.toHexString(gpr31)); - transferAndParse35(false, true, gpr31); - - // 21.4.1.6 Exiting Debug Mode - // return from interrupt - normal execution follows - // put instr. rfi - transferAndParse35(false, false, RFI); - } - - private void prologue() throws USBException, DispatchException, - BDIException { - final int EBRK_bit = 1; - - logger.fine("prologue()"); - - // save GPR30 - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - - // read ECR for exception cause - // put instr. mfspr GPR30, ECR - gpr30 = transferAndParse35(false, false, 0x7FD422A6); - logger.finer("save gpr30: 0x" + Integer.toHexString(gpr30)); - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - - // save GPR31 - // put instr. mtspr DPDR, GPR31 - ecr = transferAndParse35(false, false, 0x7FF69BA6); - // nop - gpr31 = transferAndParse35(false, false, NOP); - logger.finer("save gpr31: 0x" + Integer.toHexString(gpr31)); - - // throw an exception if EBRK (External breakpoint exception) bit is not - // set - if ((ecr & (EBRK_bit * 2)) <= 0) { - throw new BDIException( - "Wrong debug enable cause (not due to EBRK): Exception Cause Register = " - + "0x" + Integer.toHexString(ecr)); - } - } - - /** - * Signals a breakpoint and enters debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void break_() throws USBException, DispatchException, BDIException { - logger.fine("break_()"); - // assert maskable breakpoint - if (transferAndParse35(true, true, 0x7E000000) == NULL_INDICATION) { - prologue(); - } - // negate breakpoint - transferAndParse35(true, true, 0x3E000000); - } - - /** - * Resume from debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void go() throws USBException, DispatchException, BDIException { - logger.fine("go()"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - epilogue(); - // force a check whether the freeze signal is asserted or not - // this has to be done, because the state is not updated in the epilogue - // instructions - targetInDebugMode = isFreezeAsserted(); - } - - /** - * Send a command to reset the microcontroller.
- * The reset is done electrically by the USB-controller. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - private void hard_reset() throws USBException, DispatchException, - BDIException { - initPacket(STYPE_BDI_HARD_RESET_555, 0); - DataPacket data = transmit(0); - if (data == null) { - throw new BDIException("no data from device"); - } - if (data.subtype != STYPE_BDI_HARD_RESET_SUCCESS) { - throw new BDIException("wrong subtype: " + data.subtype); - } - fastDownloadStarted = false; - } - - /** - * Reset the target and put it into debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void reset_target() throws USBException, DispatchException, - BDIException { - logger.fine("reset_target()"); - // hard reset - hard_reset(); - // read ECR for exception cause - // put instr. mfspr GPR30, ECR - transferAndParse35(false, false, 0x7FD422A6); - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - // nop - ecr = transferAndParse35(false, false, NOP); - // check if entry into debug mode was because of DPI - // User's Manual 21.7.11 ECR - logger.fine("ecr: " + ecr); - if (ecr != 0x01) { - throw new BDIException( - "Wrong debug enable cause (not because of DPI): Exception Cause Register = 0x" - + Integer.toHexString(ecr)); - } - } - - /** - * Check if the freeze signal is asserted.
- * The freeze siganl is asserted if the target is in debug mode. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public boolean isFreezeAsserted() throws USBException, DispatchException, - BDIException { - initPacket(STYPE_BDI_GET_FREEZE, 0); - logger.fine("isFreezeAsserted()"); - DataPacket data = transmit(0); - if (data == null) { - throw new BDIException("no data from device"); - } - if (data.subtype != STYPE_BDI_FREEZE_RESULT) { - throw new BDIException("wrong subtype: " + data.subtype); - } - if ((data.data[0] != 0) && (data.data[0] != 1)) { - throw new BDIException("wrong data: " + data.data[0]); - } - targetInDebugMode = data.data[0] == 1; - return targetInDebugMode; - } - - /** - * Called to start the fast download procedure. - * - * @param startAddr - * Address to which the data will be downloaded. - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void startFastDownload(int startAddr) throws USBException, - DispatchException, BDIException { - logger.fine("startFastDownload(" + startAddr + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put adr into DPDR - transferAndParse35(false, true, startAddr - 4); - // start fast download - int result = transferAndParse35(true, true, 0xC6000000); - logger.finer("result: " + result); - // TODO: - // result == -1!!!! - // if (result != 0x7F) { - // ERROR - // } - fastDownloadStarted = true; - } - - /** - * Update the internal maximal values for the fastDownload - * procedure. - */ - private void updateMaxValues() { - // update the value (now the device should be connected) - if (maxNofWordsFastDownload <= 0) { - maxNofWordsFastDownload = ((device.getMaxPacketSize() - DataPacket.PACKET_MIN_LENGTH) / BDI_DATA35_LENGTH); - logger.finer("update maxNofWordsFastDownload: " - + maxNofWordsFastDownload); - } - } - - /** - * Fill one USB-Packet with data to download. The maximal number of words is - * defined by maxNofWordsFastDownload
- * startFastDownload has to be called before to set up the - * start address. - * - * @param downloadData - * Data to be downloaded (32 bit wide) - * @param dataLength - * Length of the data to download (words) - * @throws BDIException - * @throws DispatchException - * @throws USBException - */ - public void fastDownload(int[] downloadData, int dataLength) - throws BDIException, USBException, DispatchException { - logger.fine("fastDownload(int[], " + dataLength + ")"); - if (!fastDownloadStarted) { - throw new BDIException("start fast download first"); - } - updateMaxValues(); - // check if data fits into USB-packet - if (dataLength > maxNofWordsFastDownload) { - throw new BDIException("data larger than maxNofWordsFastDownload: " - + dataLength + " > " + maxNofWordsFastDownload); - } - int currentIndex = 0; - initPacket(STYPE_BDI_35FD_DATA, dataLength * BDI_DATA35_LENGTH); - while (currentIndex < dataLength) { - fillPacket(false, true, downloadData[currentIndex], currentIndex - * BDI_DATA35_LENGTH); - currentIndex++; - } - - DataPacket data = transmit(dataLength * BDI_DATA35_LENGTH); - if (data == null) { - throw new BDIException("no data from device"); - } - - switch (data.subtype) { - case STYPE_BDI_SUCCESS_FD: - - break; - case STYPE_BDI_ERROR_FD_LENGTH: - throw new BDIException("length smaller than BDI_DATA35_LENGTH"); - case STYPE_BDI_ERROR_FD_GENERAL: - throw new BDIException("general fast download error"); - default: - throw new BDIException("wrong subtype: " + data.subtype); - } - } - - /** - * Stop the fast download procedure.
- * Use this command after startFastDownload(...) and - * fastDownload(...). - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void stopFastDownload() throws USBException, DispatchException, - BDIException { - fastDownloadStarted = false; - logger.fine("stopFastDownload()"); - // stop fast download - int result = transferAndParse35(true, true, 0x86000000); - logger.finer("result: " + result); - // result == -1 !!! - // if (result != 0x5F) { - // // TODO: change exception string - // throw new BDIException("result != 0x5F: " + result); - // } - // terminate gracefully (DATA transaction) - transferAndParse35(false, true, 0x0); - } - - /** - * Write a value to the specified memory address. - * - * @param addr - * @param value - * @param size - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeMem(int addr, int value, int size) throws USBException, - DispatchException, BDIException { - logger.fine("writeMem(0x" + Integer.toHexString(addr) + ", 0x" - + Integer.toHexString(value) + ", " + size + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put adr into DPDR - transferAndParse35(false, true, addr); - // put instr. mfspr GPR31, DPDR - transferAndParse35(false, false, 0x7FF69AA6); - // put val into DPDR - transferAndParse35(false, true, value); - switch (size) { - case 1: - // put instr. stbu 31, 0(30) - transferAndParse35(false, false, 0x9FFE0000); - break; - case 2: - // put instr. sthu 31, 0(30) - transferAndParse35(false, false, 0x0B7FE0000); - break; - case 4: - // put instr. stwu 31, 0(30) - transferAndParse35(false, false, 0x97FE0000); - break; - default: - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4)"); - } - } - - /** - * Read a value from the specified memory address. - * - * @param addr - * @param size - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readMem(int addr, int size) throws USBException, - DispatchException, BDIException { - logger.fine("readMem(0x" + Integer.toHexString(addr) + ", " + size - + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put adr into DPDR - transferAndParse35(false, true, addr); - switch (size) { - case 1: - // put instr. lbzu 31, 0(30) - transferAndParse35(false, false, 0x8FFE0000); - break; - case 2: - // put instr. lhzu 31, 0(30) - transferAndParse35(false, false, 0x0A7FE0000); - break; - case 4: - // put instr. lwzu 31, 0(30) - transferAndParse35(false, false, 0x87FE0000); - break; - default: - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4)"); - } - // put instr. mtspr DPDR, GPR31 - transferAndParse35(false, false, 0x7FF69BA6); - // put instr. nop - return transferAndParse35(false, false, NOP); - } - - /** - * Write a value to the next memory address set up with the - * writeMem command. - * - * @param value - * @param size - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeMemSeq(int value, int size) throws USBException, - DispatchException, BDIException { - logger.fine("writeMemSeq(int, int)"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FF69AA6); - // put val into DPDR - transferAndParse35(false, true, value); - switch (size) { - case 1: - // put instr. stbu 31, 1(30) - transferAndParse35(false, false, 0x9FFE0001); - break; - case 2: - // put instr. sthu 31, 2(30) - transferAndParse35(false, false, 0x0B7FE0002); - break; - case 4: - // put instr. stwu 31, 4(30) - transferAndParse35(false, false, 0x97FE0004); - break; - default: - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4)"); - } - } - - /** - * Read a value from the next memory address set up with the - * readMem command. - * - * @param size - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readMemSeq(int size) throws USBException, DispatchException, - BDIException { - logger.fine("readMemSeq(int)"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - switch (size) { - case 1: - // put instr. lbzu 31, 1(30) - transferAndParse35(false, false, 0x8FFE0001); - break; - case 2: - // put instr. lhzu 31, 2(30) - transferAndParse35(false, false, 0x0A7FE0002); - break; - case 4: - // put instr. lwzu 31, 4(30) - transferAndParse35(false, false, 0x87FE0004); - break; - default: - throw new BDIException("wrong size: " + size - + " (should be 1, 2 or 4)"); - } - // put instr. mtspr DPDR, GPR31 - transferAndParse35(false, false, 0x7FF69BA6); - // put instr. nop - return transferAndParse35(false, false, NOP); - } - - /** - * Read a General Purpose Register. - * - * @param gpr - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readGPR(int gpr) throws USBException, DispatchException, - BDIException { - logger.fine("readGPR(" + gpr + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - if (gpr == 30) { - return gpr30; - } else if (gpr == 31) { - return gpr31; - } - int cmd = MRTDPDR + (gpr * 0x200000); - - // put instr. mtspr DPDR, GPRx - transferAndParse35(false, false, cmd); - // put instr. nop - return transferAndParse35(false, false, NOP); - } - - /** - * Write a General Purpose Register. - * - * @param gpr - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeGPR(int gpr, int value) throws USBException, - DispatchException, BDIException { - logger.fine("writeGPR(" + gpr + ", 0x" + Integer.toHexString(value) - + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - if (gpr == 30) { - gpr30 = gpr; - return; - } else if (gpr == 31) { - gpr31 = gpr; - return; - } - int cmd = MDPDRTR + (gpr * 0x200000); - - // put instr. mfspr GPRx, DPDR - transferAndParse35(false, false, cmd); - // put data - transferAndParse35(false, true, value); - } - - /** - * Read a Special Purpose Register. - * - * @param spr - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readSPR(int spr) throws USBException, DispatchException, - BDIException { - logger.fine("readSPR(" + spr + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - int cmd = ((spr & 0x1F) * 0x20 + (spr >>> 5)) * 0x800; - if ((spr == 268) || (spr == 269)) { - cmd += MTBRTR30; - } else { - cmd += MSPRTR30; - } - - // put instr. mfspr GPR30, SPRxxx - transferAndParse35(false, false, cmd); - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - // put instr. nop - return transferAndParse35(false, false, NOP); - } - - /** - * Write a Special Purpose Register. - * - * @param spr - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeSPR(int spr, int value) throws USBException, - DispatchException, BDIException { - logger.fine("writeSPR(" + spr + ", 0x" + Integer.toHexString(value) - + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - int cmd = MR30TSPR + ((spr & 0x1F) * 0x20 + (spr >>> 5)) * 0x800; - - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put data - transferAndParse35(false, true, value); - // put instr. mtspr SPRxxx, GPR30 - transferAndParse35(false, false, cmd); - } - - /** - * Read the Machine Status Register. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readMSR() throws USBException, DispatchException, BDIException { - logger.fine("readMSR()"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. mfmsr GPR30, MSR - transferAndParse35(false, false, 0x7FC000A6); - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - // put instr. nop - return transferAndParse35(false, false, NOP); - } - - /** - * Write the Machine Status Register. - * - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeMSR(int value) throws USBException, DispatchException, - BDIException { - logger.fine("writeMSR(0x" + Integer.toHexString(value) + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put data - transferAndParse35(false, true, value); - // put instr. mtmsr MSR, GPR30 - transferAndParse35(false, false, 0x7FC00124); - } - - /** - * Read a Floating Point Register. - * - * @param fpr - * @param tmpMemAddr - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public long readFPR(int fpr, int tmpMemAddr) throws USBException, - DispatchException, BDIException { - logger.fine("readFPR(" + fpr + ", 0x" + Integer.toHexString(tmpMemAddr) - + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // set FP bit - writeMSR(0x2002); - - // set r30 to tmpMemAddr - // put instr. mfspr r30, DPDR - transferAndParse35(false, false, MDPDRTR + (30 * 0x200000)); - // put tmpMemAddr - transferAndParse35(false, true, tmpMemAddr); - - // put instr. stfd frS, 0(r30) - transferAndParse35(false, false, 0x0D81E0000 + fpr * 0x200000); - // read data from tmpMemAddr - return ((long) readMem(tmpMemAddr, 4) << 32) - + readMem(tmpMemAddr + 4, 4); - } - - /** - * Write a Floating Point Register. - * - * @param fpr - * @param tmpMemAddr - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeFPR(int fpr, int tmpMemAddr, long value) - throws USBException, DispatchException, BDIException { - logger.fine("writeFPR(" + fpr + ", 0x" - + Integer.toHexString(tmpMemAddr) + ", 0x" - + Long.toHexString(value) + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // set FP bit - writeMSR(0x2002); - - // write data to tmpMemAddr - writeMem(tmpMemAddr, (int) (value >>> 32), 4); - writeMem(tmpMemAddr + 4, (int) value, 4); - - // set r30 to tmpMemAddr - // put instr. mfspr r30, DPDR - transferAndParse35(false, false, MDPDRTR + (30 * 0x200000)); - // put tmpMemAddr - transferAndParse35(false, true, tmpMemAddr); - - // put instr. lfd frS, 0(r30) - transferAndParse35(false, false, 0x0C81E0000 + fpr * 0x200000); - // nop - transferAndParse35(false, false, NOP); - } - - /** - * Read the Condition Register. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readCR() throws USBException, DispatchException, BDIException { - logger.fine("readCR()"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - - // put instr. mfcr GPR30 - transferAndParse35(false, false, 0x7FC00026); - // put instr. mtspr DPDR, GPR30 - transferAndParse35(false, false, 0x7FD69BA6); - // nop - return transferAndParse35(false, false, NOP); - } - - /** - * Write the Condition Register. - * - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeCR(int value) throws USBException, DispatchException, - BDIException { - logger.fine("writeCR(0x" + Integer.toHexString(value) + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // put instr. mfspr GPR30, DPDR - transferAndParse35(false, false, 0x7FD69AA6); - // put data - transferAndParse35(false, true, value); - - // put instr. mtcrf CRM=all, GPR30 - transferAndParse35(false, false, 0x7FCFF120); - } - - /** - * Read the Floating-Point Status and Control Register. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public int readFPSCR() throws USBException, DispatchException, BDIException { - logger.fine("readFPSCR()"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // save CR - int cr = readCR(); - // set FP bit - writeMSR(0x2002); - // put instr. mcrfs crf0, crf0 - transferAndParse35(false, false, 0xFC000080); - // put instr. mcrfs crf1, crf1 - transferAndParse35(false, false, 0xFC840080); - // put instr. mcrfs crf2, crf2 - transferAndParse35(false, false, 0xFD080080); - // put instr. mcrfs crf3, crf3 - transferAndParse35(false, false, 0xFD8C0080); - // put instr. mcrfs crf4, crf4 - transferAndParse35(false, false, 0xFE100080); - // put instr. mcrfs crf5, crf5 - transferAndParse35(false, false, 0xFE940080); - // put instr. mcrfs crf6, crf6 - transferAndParse35(false, false, 0xFF180080); - // put instr. mcrfs crf7, crf7 - transferAndParse35(false, false, 0xFF9C0080); - int retVal = readCR(); - writeCR(cr); - return retVal; - } - - /** - * Write the Floating-Point Status and Control Register. - * - * @param value - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public void writeFPSCR(int value) throws USBException, DispatchException, - BDIException { - logger.fine("writeFPSCR(0x" + Integer.toHexString(value) + ")"); - if (!targetInDebugMode) { - throw new BDIException("target not in debug mode"); - } - // set FP bit - writeMSR(0x2002); - for (int i = 0; i < 7; i++) { - int cmd = 0xFC00010C + (7 - i) * 0x800000 - + ((value >>> i * 4) & 0xF) * 0x1000; - // put instr. mtfsfi crfx, imm - transferAndParse35(false, false, cmd); - } - } - - /** - * Return the last known state of the freeze signal. This value may not be - * up to date as the target state may have changed meanwhile. To get the up - * to date value use isFreezeAsserted which will issue an USB - * request, read the freeze signal and update the internal value returned by - * this method.
- * The value is also updated when parsing certain BDI results (see - * parseResult35). - * - * @return the last known state of the freeze signal - */ - public boolean isTargetInDebugMode() { - return targetInDebugMode; - } - - /** - * Read the currently stored value of the GPR 30 register.
- * This value is updated when entering debug mode (prologue). - * - * @return the store value of this register - */ - public int getGpr30() { - return gpr30; - } - - /** - * Set the value of the GPR 30 register.
- * This value is written to the GPR30 register when the microcontroller - * resumes from debug mode (epilogue). - * - * @param value - * value to write to the register - */ - public void setGpr30(int value) { - logger.fine("gpr30: 0x" + Integer.toHexString(value)); - gpr30 = value; - } - - /** - * Read the currently stored value of the GPR 31 register.
- * This value is updated when entering debug mode (prologue). - * - * @return the store value of this register - */ - public int getGpr31() { - return gpr31; - } - - /** - * Set the value of the GPR 31 register.
- * This value is written to the GPR31 register when the microcontroller - * resumes from debug mode (epilogue). - * - * @param value - * value to write to the register - */ - public void setGpr31(int value) { - logger.fine("gpr31: 0x" + Integer.toHexString(value)); - gpr31 = value; - } - - /** - * @return number of maximal words used in the fastDownload - * procedure.
- * Note that this procedure only returns a valid value if the device - * is already connected (the USB bulk transfer size must be known). - */ - public int getMaxNofWordsFastDownload() { - updateMaxValues(); - return maxNofWordsFastDownload; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MC68332.java b/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MC68332.java deleted file mode 100644 index 30451c9..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MC68332.java +++ /dev/null @@ -1,255 +0,0 @@ -package ch.ntb.mcdp.bdi.blackbox; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class MC68332 { - - private static ch.ntb.mcdp.bdi.MC68332 bdi; - - /** - * Create a new BDI instance. - */ - static { - bdi = new ch.ntb.mcdp.bdi.MC68332(USBDevice.getDevice()); - } - - /** - * Sends NOPs to the target until a STATUS_OK result is - * received. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void nopsToLegalCmd() throws USBException, DispatchException, - BDIException { - bdi.nopsToLegalCmd(); - } - - /** - * Signals a breakpoint and enters debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void break_() throws USBException, DispatchException, - BDIException { - bdi.break_(); - } - - /** - * Resume from debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void go() throws USBException, DispatchException, - BDIException { - bdi.go(); - } - - /** - * Reset the target and put it into debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void reset_target() throws USBException, DispatchException, - BDIException { - bdi.reset_target(); - } - - /** - * Send the RST command (reset peripherals) to the microcontroller. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void reset_peripherals() throws USBException, - DispatchException, BDIException { - bdi.reset_peripherals(); - } - - /** - * Check if the freeze signal is asserted.
- * The freeze siganl is asserted if the target is in debug mode. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static boolean isFreezeAsserted() throws USBException, - DispatchException, BDIException { - return bdi.isFreezeAsserted(); - } - - /** - * Fill large blocks of memory.
- * Fill is used in conjunction with the writeMem command. The - * maximal number of words is defined by - * MAX_NOF_WORDS_FAST_DOWNLOAD for 1 and 2 byte (word) data. - * For 4 byte (long) data, only half the size of - * MAX_NOF_WORDS_FAST_DOWNLOAD is available as 4 bytes of - * data has to be split in two packets (2 x 2 bytes).
- * Befor using fillMem, writeMem has to be - * called to set up the start address and size. - * - * @param downloadData - * Data to be downloaded (size depending on size set up with - * writeMem) - * @param dataLength - * Number of bytes, words or longs (1, 2, 4 bytes) - * @throws BDIException - * @throws DispatchException - * @throws USBException - */ - public static void fillMem(int[] downloadData, int dataLength) - throws BDIException, USBException, DispatchException { - bdi.fillMem(downloadData, dataLength); - } - - /** - * Dump large blocks of memory.
- * Dump is used in conjunction with the readMem(...) command. - * The size depends on the size set up with readMem(...) and - * is internally stored. - * - * @param nofData - * number of bytes/words/longs to read (depends on the size set - * up with readMem(...)) - * @return read values - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static int[] dumpMem(int nofData) throws USBException, - DispatchException, BDIException { - return bdi.dumpMem(nofData); - } - - /** - * Write to a specified memory address.
- * - * @param addr - * address to write - * @param value - * value to write - * @param size - * number of bytes to read - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void writeMem(int addr, int value, int size) - throws USBException, DispatchException, BDIException { - bdi.writeMem(addr, value, size); - } - - /** - * Read the value of a specified memory address.
- * - * @param addr - * address to read - * @param size - * number of bytes to read - * @return value of this memory address - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static int readMem(int addr, int size) throws USBException, - DispatchException, BDIException { - return bdi.readMem(addr, size); - } - - /** - * Read a specified value from a user register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to read - * @return value of register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static int readUserReg(int reg) throws USBException, - DispatchException, BDIException { - return bdi.readUserReg(reg); - } - - /** - * Write a specified value to user register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to write - * @param value - * value to write to register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void writeUserReg(int reg, int value) throws USBException, - DispatchException, BDIException { - bdi.writeUserReg(reg, value); - } - - /** - * Read a specified value from a system register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to read - * @return value of register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static int readSysReg(int reg) throws USBException, - DispatchException, BDIException { - return bdi.readSysReg(reg); - } - - /** - * Write a specified value to system register.
- * See the registerDictionary.xml file for valid registers. This - * file can be found in the mc68332 resource-section. - * - * @param reg - * register to write - * @param value - * value to write to register - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void writeSysReg(int reg, int value) throws USBException, - DispatchException, BDIException { - bdi.writeSysReg(reg, value); - } - - /** - * Return the last known state of the freeze signal.
- * This value may not be up to date as the target state may have changed - * meanwhile. To get the up to date value use isFreezeAsserted - * which will issue an USB request, read the freeze signal and update the - * internal value returned by this method. - * - * @return the last known state of the freeze signal - */ - public static boolean isTargetInDebugMode() { - return bdi.isTargetInDebugMode(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MPC555.java b/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MPC555.java deleted file mode 100644 index 2819d07..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/blackbox/MPC555.java +++ /dev/null @@ -1,252 +0,0 @@ -package ch.ntb.mcdp.bdi.blackbox; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class MPC555 { - - private static ch.ntb.mcdp.bdi.MPC555 bdi; - - /** - * Create a new BDI instance. - */ - static { - bdi = new ch.ntb.mcdp.bdi.MPC555(USBDevice.getDevice()); - } - - /** - * Signals a breakpoint and enters debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void break_() throws USBException, DispatchException, - BDIException { - bdi.break_(); - } - - /** - * Resume from debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void go() throws USBException, DispatchException, - BDIException { - bdi.go(); - } - - /** - * Reset the target and put it into debug mode. - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void reset_target() throws USBException, DispatchException, - BDIException { - bdi.reset_target(); - } - - /** - * Check if the freeze signal is asserted.
- * The freeze siganl is asserted if the target is in debug mode. - * - * @return - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static boolean isFreezeAsserted() throws USBException, - DispatchException, BDIException { - return bdi.isFreezeAsserted(); - } - - /** - * Called to start the fast download procedure. - * - * @param startAddr - * Address to which the data will be downloaded. - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void startFastDownload(int startAddr) throws USBException, - DispatchException, BDIException { - bdi.startFastDownload(startAddr); - } - - /** - * Fill one USB-Packet with data to download. The maximal number of words is - * defined by MAX_NOF_WORDS_FAST_DOWNLOAD
- * startFastDownload has to be called before to set up the - * start address. - * - * @param downloadData - * Data to be downloaded (32 bit wide) - * @param dataLength - * Length of the data to download (words) - * @throws BDIException - * @throws DispatchException - * @throws USBException - */ - public static void fastDownload(int[] downloadData, int dataLength) - throws BDIException, USBException, DispatchException { - bdi.fastDownload(downloadData, dataLength); - } - - /** - * Stop the fast download procedure.
- * Use this command after startFastDownload(...) and - * fastDownload(...). - * - * @throws USBException - * @throws DispatchException - * @throws BDIException - */ - public static void stopFastDownload() throws USBException, - DispatchException, BDIException { - bdi.stopFastDownload(); - } - - public static void writeMem(int addr, int value, int size) - throws USBException, DispatchException, BDIException { - bdi.writeMem(addr, value, size); - } - - public static int readMem(int addr, int size) throws USBException, - DispatchException, BDIException { - return bdi.readMem(addr, size); - } - - public static void writeMemSeq(int value, int size) throws USBException, - DispatchException, BDIException { - bdi.writeMemSeq(value, size); - } - - public static int readMemSeq(int size) throws USBException, - DispatchException, BDIException { - return bdi.readMemSeq(size); - } - - public static int readGPR(int gpr) throws USBException, DispatchException, - BDIException { - return bdi.readGPR(gpr); - } - - public static void writeGPR(int gpr, int value) throws USBException, - DispatchException, BDIException { - bdi.writeGPR(gpr, value); - } - - public static int readSPR(int spr) throws USBException, DispatchException, - BDIException { - return bdi.readSPR(spr); - } - - public static void writeSPR(int spr, int value) throws USBException, - DispatchException, BDIException { - bdi.writeSPR(spr, value); - } - - public static int readMSR() throws USBException, DispatchException, - BDIException { - return bdi.readMSR(); - } - - public static void writeMSR(int value) throws USBException, - DispatchException, BDIException { - bdi.writeMSR(value); - } - - public static long readFPR(int fpr, int tmpMemAddr) throws USBException, - DispatchException, BDIException { - return bdi.readFPR(fpr, tmpMemAddr); - } - - public static void writeFPR(int fpr, int tmpMemAddr, long value) - throws USBException, DispatchException, BDIException { - bdi.writeFPR(fpr, tmpMemAddr, value); - } - - public static int readCR() throws USBException, DispatchException, - BDIException { - return bdi.readCR(); - } - - public static void writeCR(int value) throws USBException, - DispatchException, BDIException { - bdi.writeCR(value); - } - - public static int readFPSCR() throws USBException, DispatchException, - BDIException { - return bdi.readFPSCR(); - } - - public static void writeFPSCR(int value) throws USBException, - DispatchException, BDIException { - bdi.writeFPSCR(value); - } - - /** - * Return the last known state of the freeze signal. This value may not be - * up to date as the target state may have changed meanwhile. To get the up - * to date value use isFreezeAsserted which will issue an USB - * request, read the freeze signal and update the internal value returned by - * this method. - * - * @return the last known state of the freeze signal - */ - public static boolean isTargetInDebugMode() { - return bdi.isTargetInDebugMode(); - } - - /** - * Read the currently stored value of the GPR 30 register.
- * This value is updated when entering debug mode (break -> prologue). - * - * @return the store value of this register - */ - public static int getGpr30() { - return bdi.getGpr30(); - } - - /** - * Set the value of the GPR 30 register.
- * This value is written to the GPR30 register when the microcontroller - * resumes from debug mode (go -> epilogue). - * - * @param value - * value to write to the register - */ - public static void setGpr30(int value) { - bdi.setGpr30(value); - } - - /** - * Read the currently stored value of the GPR 31 register.
- * This value is updated when entering debug mode (break -> prologue). - * - * @return the store value of this register - */ - public static int getGpr31() { - return bdi.getGpr31(); - } - - /** - * Set the value of the GPR 31 register.
- * This value is written to the GPR31 register when the microcontroller - * resumes from debug mode (go -> epilogue). - * - * @param value - * value to write to the register - */ - public static void setGpr31(int value) { - bdi.setGpr31(value); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332App.java b/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332App.java deleted file mode 100644 index 3e1d122..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332App.java +++ /dev/null @@ -1,279 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -import ch.ntb.mcdp.bdi.MC68332; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class BDI332App { - - private Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10" - - private Button button1 = null; - - private Button button2 = null; - - private Button button3 = null; - - private Button button4 = null; - - private Button button5 = null; - - private Button button6 = null; - - private Button button7 = null; - - private Button button8 = null; - - private Button button9 = null; - - private Button button10 = null; - - private Button button15 = null; - - private Button button11 = null; - - private Button button12 = null; - - private Button button13 = null; - - private Button button14 = null; - - private Button button20 = null; - - private Button button16 = null; - - private Button button17 = null; - - private Button button18 = null; - - private Button button19 = null; - - /** - * This method initializes sShell - */ - private void createSShell() { - sShell = new Shell(); - sShell.setText("Shell"); - sShell.setLayout(new RowLayout()); - sShell.setSize(new org.eclipse.swt.graphics.Point(320, 134)); - button1 = new Button(sShell, SWT.NONE); - button1.setText("testBdiTransaction"); - button1 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button1(); - } - }); - button2 = new Button(sShell, SWT.NONE); - button2.setText("reset_target"); - button2 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button2(); - } - }); - button3 = new Button(sShell, SWT.NONE); - button3.setText("go"); - button3 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button3(); - } - }); - button4 = new Button(sShell, SWT.NONE); - button4.setText("break_"); - button4 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button4(); - } - }); - button5 = new Button(sShell, SWT.NONE); - button5.setText("freeze"); - button6 = new Button(sShell, SWT.NONE); - button6.setText("writeMem"); - button6 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button6(); - } - }); - button7 = new Button(sShell, SWT.NONE); - button7.setText("readMem"); - button8 = new Button(sShell, SWT.NONE); - button8.setText("dumpMem"); - button8 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button8(); - } - }); - button9 = new Button(sShell, SWT.NONE); - button9.setText("NOP"); - button10 = new Button(sShell, SWT.NONE); - button10.setText("fillMem"); - button11 = new Button(sShell, SWT.NONE); - button11.setText("initTarget"); - button11 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button11(); - } - }); - button12 = new Button(sShell, SWT.NONE); - button12.setText("replaceA"); - button12 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button12(); - } - }); - button13 = new Button(sShell, SWT.NONE); - button13.setText("compare1"); - button13 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button13(); - } - }); - button14 = new Button(sShell, SWT.NONE); - button14.setText("compare2"); - button14 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button14(); - } - }); - button15 = new Button(sShell, SWT.NONE); - button15.setText("resetUSB"); - button16 = new Button(sShell, SWT.NONE); - button16.setText("replaceE"); - button16 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button16(); - } - }); - button17 = new Button(sShell, SWT.NONE); - button17.setText("-"); - button17 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button17(); - } - }); - button18 = new Button(sShell, SWT.NONE); - button18.setText("-"); - button18 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button18(); - } - }); - button19 = new Button(sShell, SWT.NONE); - button19.setText("-"); - button19 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - Dump332.dumpToBin(); - } - }); - button20 = new Button(sShell, SWT.NONE); - button20.setText("-"); - button20 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - Dump332.dumpToHex(); - } - }); - button15 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button15(); - } - }); - button10 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button10(); - } - }); - button9 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button9(); - } - }); - button7 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button7(); - } - }); - button5 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI332test.button5(); - } - }); - } - - public static void main(String[] args) { - BDI332App app = new BDI332App(); - app.createSShell(); - app.sShell.open(); - - Display display = app.sShell.getDisplay(); - - try { - USBDevice.open(); - MC68332 bdi = new MC68332(USBDevice.getDevice()); - BDI332test.bdi = bdi; - Dump332.bdi = bdi; - System.out.println("open device..."); - } catch (USBException e) { - e.printStackTrace(); - return; - } - - while (!app.sShell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); - } - } - - try { - USBDevice.close(); - System.out.println("closing device..."); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332test.java b/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332test.java deleted file mode 100644 index 11ef256..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI332test.java +++ /dev/null @@ -1,718 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.bdi.MC68332; -import ch.ntb.mcdp.mc68332.IMCBTargetBoard; -import ch.ntb.mcdp.usb.DataPacket; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.USBException; - -public class BDI332test { - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi_test; - - public static MC68332 bdi; - - private static void testBdiTransaction() { - // test bdi transaction - DataPacket result = null; - try { - result = bdi.transfer(0xaaaa); - } catch (USBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (DispatchException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (result != null) { - logger.info(result.toString()); - } - } - - private static void reset_target() { - try { - bdi.reset_target(); - } catch (USBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (DispatchException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void freeze() { - try { - logger.info("isFreezeAsserted: " + bdi.isFreezeAsserted()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - private static void break_() { - try { - bdi.break_(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void go() { - try { - bdi.go(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void writeMem() { - final int BASE_ADDR = 0x105624; - try { - bdi.writeMem(BASE_ADDR, 0x123456, 4); - bdi.writeMem(BASE_ADDR + 4, 0x123457, 4); - bdi.writeMem(BASE_ADDR + 8, 0x123458, 4); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void readMem() { - final int BASE_ADDR = 0x105624; - try { - StringBuffer sb = new StringBuffer("0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + "\n"); - sb.append("0x" + Integer.toHexString(bdi.readMem(BASE_ADDR + 4, 4)) - + "\n"); - sb.append("0x" + Integer.toHexString(bdi.readMem(BASE_ADDR + 8, 4)) - + "\n"); - logger.info(sb.toString()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - // private static void fastDownload() { - // int[] testData = new int[120]; - // for (int i = 0; i < testData.length; i++) { - // testData[i] = i; - // } - // try { - // BDI332.startFastDownload(0x800000); - // BDI332.fastDownload(testData, BDI332.MAX_NOF_WORDS_FAST_DOWNLOAD); - // BDI332.stopFastDownload(); - // } catch (USBException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } catch (DispatchException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } catch (BDIException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - // } - - // private static void readMemSeq() { - // int startAddr = 0x800000; - // try { - // StringBuffer sb = new StringBuffer(0 + "\tData: 0x" - // + Integer.toHexString(BDI332.readMem(startAddr, 4)) + "\n"); - // for (int i = 1; i < 120; i++) { - // sb.append(i + "\tData: 0x" - // + Integer.toHexString(BDI332.readMemSeq(4)) + "\n"); - // } - // System.out.println(sb.toString()); - // } catch (USBException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } catch (DispatchException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } catch (BDIException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - // } - - public static void button1() { - logger.info("testBdiTransaction()"); - testBdiTransaction(); - } - - public static void button2() { - logger.info("reset_target()"); - reset_target(); - } - - public static void button3() { - logger.info("go()"); - go(); - } - - public static void button4() { - logger.info("break_()"); - break_(); - } - - public static void button5() { - logger.info("freeze()"); - freeze(); - } - - public static void button6() { - logger.info("writeMem()"); - writeMem(); - } - - public static void button7() { - logger.info("readMem()"); - readMem(); - } - - public static void button8() { - - final int BASE_ADDR = 0x105624; - int[] result; - - logger.info("dump()"); - try { - logger.info("Data: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + " "); - result = bdi.dumpMem(bdi.getMaxNofLongsDump()); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < result.length; i++) { - sb.append("0x" + Integer.toHexString(result[i]) + " "); - } - logger.info(sb.toString()); - - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button9() { - logger.info("nop"); - // test bdi transaction - DataPacket result = null; - try { - result = bdi.transfer(0x0000); - } catch (USBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (DispatchException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (result != null) { - logger.info(result.toString()); - } - } - - public static void button10() { - - final int BASE_ADDR = 0x105624; - - logger.info("fill"); - try { - bdi.writeMem(BASE_ADDR, 0, 4); - int[] data = new int[bdi.getMaxNofLongsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = i; - } - bdi.fillMem(data, data.length); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button11() { - logger.info("initTarget()"); - try { - IMCBTargetBoard imcb = new IMCBTargetBoard(bdi); - imcb.init(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void button12() { - - final int BASE_ADDR = 0x105624; - final int DATA = 0x00ff00ff; - final int OFFSET = 0x06 * 4; - final int LENGTH = 0x04; - - try { - logger.info("Fill (1 to data.length)"); - bdi.writeMem(BASE_ADDR, 0, 4); - int[] data = new int[bdi.getMaxNofLongsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = i + 1; - } - bdi.fillMem(data, data.length); - logger.info("writing byte " + (OFFSET / 4) + " to " - + ((OFFSET / 4) + LENGTH) + " with 0x" - + Integer.toHexString(DATA)); - bdi.writeMem(BASE_ADDR + OFFSET, DATA, 4); - for (int i = 0; i < LENGTH; i++) { - data[i] = DATA; - } - bdi.fillMem(data, LENGTH); - logger.info((LENGTH + 1) + " bytes written"); - logger.info("dump data"); - int firstInt = bdi.readMem(BASE_ADDR, 4); - int[] result = bdi.dumpMem(bdi.getMaxNofLongsDump()); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < result.length; i++) { - sb.append("0x" + Integer.toHexString(result[i]) + " "); - } - logger.info("Data: 0x" + Integer.toHexString(firstInt) + " " - + sb.toString()); - logger.info("Done"); - } catch (BDIException e) { - e.printStackTrace(); - } catch (USBException e) { - e.printStackTrace(); - } catch (DispatchException e) { - e.printStackTrace(); - } - } - - public static void button13() { - final int BASE_ADDR = 0x105624; - final int FIRST_VAL = 0xFF; - - try { - logger.info("initialize data"); - bdi.writeMem(BASE_ADDR, FIRST_VAL, 4); - int[] data = new int[bdi.getMaxNofLongsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = 5; - } - bdi.fillMem(data, data.length); - - logger.info("write data"); - bdi.writeMem(BASE_ADDR, FIRST_VAL, 4); - data = new int[10]; - for (int i = 0; i < data.length; i++) { - data[i] = i; - } - bdi.fillMem(data, data.length); - logger.info("Fill done"); - logger.info("read back data"); - int firstResult = bdi.readMem(BASE_ADDR, 4); - if (firstResult != FIRST_VAL) { - logger.warning("Error at 0: 0x" - + Integer.toHexString(firstResult) + " instead of 0x" - + Integer.toHexString(FIRST_VAL)); - } - logger.fine("Compare first 0x" + Integer.toHexString(firstResult) - + " == 0x" + Integer.toHexString(FIRST_VAL)); - int[] result = bdi.dumpMem(bdi.getMaxNofLongsDump()); - for (int i = 0; i < result.length; i++) { - logger.fine("Compare " + i + ": 0x" - + Integer.toHexString(result[i])); - } - logger.info("Dump done"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button14() { - - final int BASE_ADDR = 0x105624; - final int FIRST_VAL = 0xFF; - - logger.info("write data"); - try { - bdi.writeMem(BASE_ADDR, FIRST_VAL, 4); - int[] data = new int[bdi.getMaxNofLongsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = i; - } - bdi.fillMem(data, data.length); - logger.info("Fill done"); - logger.info("read back data"); - int firstResult = bdi.readMem(BASE_ADDR, 4); - if (firstResult != FIRST_VAL) { - logger.warning("Error at 0: 0x" - + Integer.toHexString(firstResult) + " instead of 0x" - + Integer.toHexString(FIRST_VAL)); - } - logger.fine("Compare first 0x" + Integer.toHexString(firstResult) - + " == 0x" + Integer.toHexString(FIRST_VAL)); - int[] result = bdi.dumpMem(bdi.getMaxNofLongsFill()); - for (int i = 0; i < result.length; i++) { - if (data[i] != result[i]) { - logger.warning("Error at " + i + ": 0x" - + Integer.toHexString(result[i]) + " instead of 0x" - + Integer.toHexString(data[i])); - } - logger.fine("Compare " + i + ": 0x" - + Integer.toHexString(result[i]) + " == 0x" - + Integer.toHexString(data[i])); - - } - logger.info("Dump done"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button15() { - logger.info("resetUSB()"); - try { - USBDevice.reset(); - Thread.sleep(500); - USBDevice.open(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button16() { - final int BASE_ADDR = 0x105624; - final int DATA = 0x00ff00ff; - final int OFFSET = (bdi.getMaxNofLongsFill() - 2) * 4; - final int LENGTH = 0x04; - final int DUMP_BASE = BASE_ADDR + (bdi.getMaxNofLongsFill() / 2) * 4; - - try { - logger.info("REPLACE at the end"); - logger.info("Fill first"); - bdi.writeMem(BASE_ADDR, 0, 4); - int[] data = new int[bdi.getMaxNofLongsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = i + 1; - } - bdi.fillMem(data, data.length); - logger.info("Fill second"); - bdi.writeMem(BASE_ADDR + (bdi.getMaxNofLongsFill() + 1) * 4, 0, 4); - for (int i = 0; i < data.length; i++) { - data[i] = bdi.getMaxNofLongsFill() + i + 2; - } - bdi.fillMem(data, data.length); - logger.info("Dump from base: 0x" + Integer.toHexString(DUMP_BASE)); - int firstInt = bdi.readMem(DUMP_BASE, 4); - int[] result = bdi.dumpMem(bdi.getMaxNofLongsFill()); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < result.length; i++) { - sb.append("0x" + Integer.toHexString(result[i]) + " "); - } - logger.info("Data: 0x" + Integer.toHexString(firstInt) + " " - + sb.toString()); - - logger.info("writing byte " + (OFFSET / 4) + " to " - + ((OFFSET / 4) + LENGTH) + " with 0x" - + Integer.toHexString(DATA)); - bdi.writeMem(BASE_ADDR + OFFSET, DATA, 4); - for (int i = 0; i < LENGTH; i++) { - data[i] = DATA; - } - bdi.fillMem(data, LENGTH); - logger.info((LENGTH + 1) + " bytes written"); - logger.info("dump data from base: 0x" - + Integer.toHexString(DUMP_BASE)); - firstInt = bdi.readMem(DUMP_BASE, 4); - result = bdi.dumpMem(bdi.getMaxNofLongsFill()); - sb = new StringBuffer(); - for (int i = 0; i < result.length; i++) { - sb.append("0x" + Integer.toHexString(result[i]) + " "); - } - logger.info("Data: 0x" + Integer.toHexString(firstInt) + " " - + sb.toString()); - logger.info("Done"); - } catch (BDIException e) { - e.printStackTrace(); - } catch (USBException e) { - e.printStackTrace(); - } catch (DispatchException e) { - e.printStackTrace(); - } - - } - - public static void button17() { - logger.info("test read/write mem byte/word"); - final int BASE_ADDR = 0x105624; - final int DATA = 0x12345678; - - try { - logger.info("read 4 bytes at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4))); - logger.info("read 2 bytes at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 2))); - logger.info("read 1 byte at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 1))); - logger.info("write 1 byte at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" + Integer.toHexString(DATA)); - bdi.writeMem(BASE_ADDR, DATA, 1); - logger.info("read 4 bytes at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4))); - logger.info("write 2 byte at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" + Integer.toHexString(DATA)); - bdi.writeMem(BASE_ADDR, DATA, 2); - logger.info("read 4 bytes at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4))); - logger.info("write 4 byte at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" + Integer.toHexString(DATA)); - bdi.writeMem(BASE_ADDR, DATA, 4); - logger.info("read 4 bytes at: 0x" + Integer.toHexString(BASE_ADDR) - + ", value: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4))); - } catch (USBException e) { - e.printStackTrace(); - } catch (DispatchException e) { - e.printStackTrace(); - } catch (BDIException e) { - e.printStackTrace(); - } - logger.info("test done"); - } - - private static void dump(int baseAddr, int size) throws USBException, - DispatchException, BDIException { - int dumpSize = 0; - if (size > 2) { - dumpSize = bdi.getMaxNofLongsFill(); - } else { - dumpSize = bdi.getMaxNofBytesWordsFill(); - } - logger.info("read " + size + " byte(s) at 0x" - + Integer.toHexString(baseAddr) + ", value: " - + Integer.toHexString(bdi.readMem(baseAddr, size))); - int[] result = bdi.dumpMem(dumpSize); - StringBuffer sb = new StringBuffer("data: "); - for (int i = 0; i < result.length; i++) { - sb.append("0x" + Integer.toHexString(result[i]) + " "); - } - logger.info(sb.toString()); - } - - private static void fill(int baseAddr, int size) throws USBException, - DispatchException, BDIException { - int fillSize = 0; - if (size > 2) { - fillSize = bdi.getMaxNofLongsFill(); - } else { - fillSize = bdi.getMaxNofBytesWordsFill(); - } - int[] data = new int[fillSize]; - for (int i = 0; i < data.length; i++) { - data[i] = i; - } - logger.info("fill " + data.length + " integers with size " + size - + " byte(s)"); - bdi.writeMem(baseAddr, 0, size); - bdi.fillMem(data, data.length); - } - - public static void button18() { - final int BASE_ADDR = 0x105624; - - int[] data = new int[bdi.getMaxNofBytesWordsFill()]; - for (int i = 0; i < data.length; i++) { - data[i] = i; - } - try { - IMCBTargetBoard imcb = new IMCBTargetBoard(bdi); - imcb.init(); - fill(BASE_ADDR, 4); - // TODO: this does produce an error why??? - imcb.init(); - dump(BASE_ADDR, 4); - imcb.init(); - fill(BASE_ADDR, 2); - imcb.init(); - dump(BASE_ADDR, 2); - imcb.init(); - fill(BASE_ADDR, 1); - imcb.init(); - dump(BASE_ADDR, 1); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public static void button19() { - logger.info("test read/write register"); - - try { - int REG = 0x8; - int VALUE = 0x12345; - logger.info("test SysReg (ATEMP)"); - bdi.writeSysReg(REG, VALUE); - int result = bdi.readSysReg(REG); - checkResult(VALUE, result); - - REG = 0x5; - logger.info("test UserReg (D5)"); - bdi.writeUserReg(REG, VALUE); - result = bdi.readUserReg(REG); - checkResult(VALUE, result); - - REG = 0xD; - logger.info("test UserReg (A5)"); - bdi.writeUserReg(REG, VALUE); - result = bdi.readUserReg(REG); - checkResult(VALUE, result); - - // Does only work after LoadRam! - // - // REG = 0xFFFFFA00; - // logger.info("test ctrlReg (SIMCR)"); - // bdi.writeMem(REG, VALUE, 4); - // result = bdi.readMem(REG, 4); - // checkResult(VALUE, result); - - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void checkResult(int value, int result) { - if (value != result) { - logger.severe("value: 0x" + Integer.toHexString(value) - + ", result: 0x" + Integer.toHexString(result)); - } else { - logger.info("test ok: result: 0x" + Integer.toHexString(result)); - } - } - - public static void button20() { - final int BASE_ADDR = 0x01004E0; - try { - StringBuffer sb = new StringBuffer("0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + "\n"); - sb.append("0x" + Integer.toHexString(bdi.readMem(BASE_ADDR + 4, 4)) - + "\n"); - sb.append("0x" + Integer.toHexString(bdi.readMem(BASE_ADDR + 8, 4)) - + "\n"); - logger.info(sb.toString()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - // public static void main(String[] args) { - // boolean testRunning = true; - // - // while (testRunning) { - // // testBdiTransaction(); - // // reset_target(); - // // freeze(); - // // go(); - // // System.out.println(); - // - // try { - // Thread.sleep(5000); - // } catch (InterruptedException e) { - // e.printStackTrace(); - // } - // } - // - // } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555App.java b/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555App.java deleted file mode 100644 index 18c2c4f..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555App.java +++ /dev/null @@ -1,221 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -import ch.ntb.mcdp.bdi.MPC555; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class BDI555App { - - private Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10" - - private Button button1 = null; - - private Button button2 = null; - - private Button button3 = null; - - private Button button4 = null; - - private Button button5 = null; - - private Button button6 = null; - - private Button button7 = null; - - private Button button8 = null; - - private Button button9 = null; - - private Button button10 = null; - - private Button button11 = null; - - private Button button12 = null; - - private Button button13 = null; - - private Button button14 = null; - - private Button button15 = null; - - /** - * This method initializes sShell - */ - private void createSShell() { - sShell = new Shell(); - sShell.setText("Shell"); - sShell.setLayout(new RowLayout()); - sShell.setSize(new org.eclipse.swt.graphics.Point(361, 108)); - button1 = new Button(sShell, SWT.NONE); - button1.setText("testBdiTransaction"); - button1 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button1(); - } - }); - button2 = new Button(sShell, SWT.NONE); - button2.setText("reset_target"); - button2 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button2(); - } - }); - button3 = new Button(sShell, SWT.NONE); - button3.setText("go"); - button3 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button3(); - } - }); - button4 = new Button(sShell, SWT.NONE); - button4.setText("break_"); - button4 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button4(); - } - }); - button5 = new Button(sShell, SWT.NONE); - button5.setText("freeze"); - button6 = new Button(sShell, SWT.NONE); - button6.setText("writeMem"); - button6 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button6(); - } - }); - button7 = new Button(sShell, SWT.NONE); - button7.setText("readMem"); - button8 = new Button(sShell, SWT.NONE); - button8.setText("readMemSeq"); - button8 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button8(); - } - }); - button9 = new Button(sShell, SWT.NONE); - button9.setText("Button9"); - button10 = new Button(sShell, SWT.NONE); - button10.setText("fastDownload"); - button11 = new Button(sShell, SWT.NONE); - button11.setText("read/write Registers"); - button12 = new Button(sShell, SWT.NONE); - button12.setText("Button12"); - button12 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button12(); - } - }); - button13 = new Button(sShell, SWT.NONE); - button13.setText("Button13"); - button13 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button13(); - } - }); - button14 = new Button(sShell, SWT.NONE); - button14.setText("Button14"); - button14 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button14(); - } - }); - button15 = new Button(sShell, SWT.NONE); - button15.setText("Button15"); - button15 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button15(); - } - }); - button11 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button11(); - } - }); - button10 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button10(); - } - }); - button9 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button9(); - } - }); - button7 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button7(); - } - }); - button5 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - BDI555test.button5(); - } - }); - } - - public static void main(String[] args) { - BDI555App app = new BDI555App(); - app.createSShell(); - app.sShell.open(); - - Display display = app.sShell.getDisplay(); - - try { - USBDevice.open(); - BDI555test.bdi = new MPC555(USBDevice.getDevice()); - } catch (USBException e) { - e.printStackTrace(); - return; - } - - while (!app.sShell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); - } - } - - try { - USBDevice.close(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555test.java b/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555test.java deleted file mode 100644 index 389db2a..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/BDI555test.java +++ /dev/null @@ -1,648 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import java.util.logging.Level; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.bdi.MPC555; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.USBException; - -public class BDI555test { - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi_test; - - public static MPC555 bdi; - - private static void testBdiTransaction() { - /* - // test bdi transaction - DataPacket result = null; - try { - // result = bdi.transfer(false, false, 0x00000000); - result = bdi.transfer(false, false, 0x7FD69BA6); - // result = bdi.transfer(false, false, 0x60000000); - } catch (USBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (DispatchException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (result != null) { - System.out.println(result.toString()); - } - */ - } - - private static void reset_target() { - try { - bdi.reset_target(); - // assign pin to Freeze output - bdi.writeMem(0x02FC000, 0x40000, 4); - // enable bus monitor, disable watchdog timer - bdi.writeMem(0x02FC004, 0x0FFFFFF83, 4); - // SCCR, switch off EECLK for download - bdi.writeMem(0x02FC280, 0x08121C100, 4); - logger.info("Is freeze asserted: " + bdi.isFreezeAsserted()); - } catch (USBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (DispatchException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void freeze() { - try { - logger.info("isFreezeAsserted: " + bdi.isFreezeAsserted()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - private static void break_() { - try { - bdi.break_(); - logger.info("break"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void go() { - try { - bdi.go(); - logger.info("go"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void writeMem() { - final int BASE_ADDR = 0x800000, VALUE = 0x123456; - try { - bdi.writeMem(BASE_ADDR, VALUE, 4); - logger.info("writeMem: BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + ", value = 0x" - + Integer.toHexString(VALUE)); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void readMem() { - final int BASE_ADDR = 0x800000; - try { - StringBuffer sb = new StringBuffer("readMem: BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + ", value = "); - for (int i = 0; i < 10; i++) { - sb.append("0x" - + Integer - .toHexString(bdi.readMem(BASE_ADDR + i * 4, 4)) - + "\n"); - } - logger.info(sb.toString()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void fastDownload() { - final int BASE_ADDR = 0x800000; - int[] testData = new int[bdi.getMaxNofWordsFastDownload()]; - for (int i = 0; i < testData.length; i++) { - testData[i] = i; - } - try { - logger.info("fastDownload at BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + ", length = " - + bdi.getMaxNofWordsFastDownload()); - bdi.startFastDownload(BASE_ADDR); - bdi.fastDownload(testData, bdi.getMaxNofWordsFastDownload()); - bdi.stopFastDownload(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void readMemSeq() { - final int BASE_ADDR = 0x800000; - try { - StringBuffer sb = new StringBuffer("readMemSeq: BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + "\n" + 0 + "\tData: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + "\n"); - for (int i = 1; i < 120; i++) { - sb.append(i + "\tData: 0x" - + Integer.toHexString(bdi.readMemSeq(4)) + "\n"); - } - logger.info(sb.toString()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void nop() throws USBException, DispatchException, - BDIException { - // nop - System.out.println("nop"); - //int data = bdi.transferAndParse35(true, true, 0x00000000); - //System.out.println("0x" + Integer.toHexString(data)); - } - - public static void button1() { - System.out.println("testBdiTransaction()"); - testBdiTransaction(); - } - - public static void button2() { - reset_target(); - } - - public static void button3() { - go(); - } - - public static void button4() { - break_(); - } - - public static void button5() { - freeze(); - } - - public static void button6() { - writeMem(); - } - - public static void button7() { - readMem(); - } - - public static void button8() { - readMemSeq(); - } - - public static void button9() { - final int SPR = 158; - final int VALUE = 0x12345; - try { - int result = bdi.readSPR(SPR); - logger.info("readSPR(" + SPR + ") = 0x" - + Integer.toHexString(result)); - bdi.writeSPR(SPR, VALUE); - logger.info("writeSPR(" + SPR + ", 0x" + Integer.toHexString(VALUE) - + ")"); - result = bdi.readSPR(SPR); - logger.info("readSPR(" + SPR + ") = 0x" - + Integer.toHexString(result)); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - // logger.info("not implemented!"); - - // logger.info("hard_reset()"); - // try { - // bdi.hard_reset(); - // } catch (USBException e) { - // e.printStackTrace(); - // } catch (DispatchException e) { - // e.printStackTrace(); - // } catch (BDIException e) { - // e.printStackTrace(); - // } - } - - public static void button10() { - // fastDownload(); - button12(); - } - - public static void button11() { - Level oldLevel = LogUtil.ch_ntb_mcdp_bdi.getLevel(); - LogUtil.setLevel(LogUtil.ch_ntb_mcdp_bdi, Level.ALL); - try { - logger.info("test SPR"); - - // valid spr registers: - // CMPA–CMPD SPR 144 – SPR 147 - // CMPE–CMPF SPR 152, 153 - // CMPG–CMPH SPR 154, 155 - // ICTRL SPR 158 - // LCTRL1 SPR 156 - // LCTRL2 SPR 157 - // COUNTA SPR 150 - // COUNTB SPR 151 - // ECR SPR 148 - // DER SPR 149 - - int REG = 152; - int VALUE = 0x12345; - bdi.writeSPR(REG, VALUE); - int result = bdi.readSPR(REG); - checkResult(VALUE, result); - - logger.info("test GPR"); - REG = 5; - bdi.writeGPR(REG, VALUE); - result = bdi.readGPR(REG); - checkResult(VALUE, result); - - logger.info("test FPR"); - int TMP_MEM_ADDR = 0x800000; - long LONG_VAL = 0x12345012345L; - bdi.writeFPR(REG, TMP_MEM_ADDR, LONG_VAL); - long fprResult = bdi.readFPR(REG, TMP_MEM_ADDR); - if (fprResult != LONG_VAL) { - logger.severe("value: 0x" + Long.toHexString(LONG_VAL) - + ", result: 0x" + Long.toHexString(fprResult)); - } else { - logger - .info("test ok: result: 0x" - + Long.toHexString(fprResult)); - } - - logger.info("test MSR"); - bdi.writeMSR(VALUE); - result = bdi.readMSR(); - checkResult(VALUE, result); - - logger.info("test CR"); - bdi.writeCR(VALUE); - result = bdi.readCR(); - checkResult(VALUE, result); - - logger.info("test CtrlReg"); - int MEM_ADDR = 0x2FC100; - bdi.writeMem(MEM_ADDR, VALUE, 4); - result = bdi.readMem(MEM_ADDR, 4); - checkResult(VALUE, result); - - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - LogUtil.setLevel(LogUtil.ch_ntb_mcdp_bdi, oldLevel); - } - - private static void checkResult(int value, int result) { - if (value != result) { - logger.severe("value: 0x" + Integer.toHexString(value) - + ", result: 0x" + Integer.toHexString(result)); - } else { - logger.info("test ok: result: 0x" + Integer.toHexString(result)); - } - } - - public static void button12() { - final int BASE_ADDR = 0x3f9bf0; - - int[] data = new int[bdi.getMaxNofWordsFastDownload()]; - - data[0] = 0x9421ffb0; - data[1] = 0xbf810040; - data[2] = 0x3be10038; - data[3] = 0x3bc30000; - data[4] = 0x3ba40000; - data[5] = 0x3c600030; - data[6] = 0x38836102; - data[7] = 0x38a08000; - data[8] = 0xb0a40000; - data[9] = 0x2c9e0000; - data[10] = 0x4085004c; - data[11] = 0x3cc00030; - data[12] = 0x38e66100; - data[13] = 0x39000000; - data[14] = 0xb1070000; - data[15] = 0x1f9d2710; - data[16] = 0x339cffff; - data[17] = 0x2f1c0000; - data[18] = 0x4199fff8; - data[19] = 0x3d200030; - data[20] = 0x39496100; - data[21] = 0x39608000; - data[22] = 0xb16a0000; - data[23] = 0x1f9d2710; - data[24] = 0x339cffff; - data[25] = 0x2f9c0000; - data[26] = 0x419dfff8; - data[27] = 0x33deffff; - data[28] = 0x4280ffb4; - data[29] = 0x383fffc8; - data[30] = 0xbb810040; - data[31] = 0x38210050; - data[32] = 0x4e800020; - data[33] = 0x9421ffb0; - data[34] = 0x7c0802a6; - data[35] = 0x9001004c; - data[36] = 0xbfc10044; - data[37] = 0x3be10038; - data[38] = 0x90410014; - data[39] = 0x7fcc42e6; - data[40] = 0x387e0000; - data[41] = 0x42800008; - data[42] = 0x7fe00008; - data[43] = 0x383fffc8; - data[44] = 0xbbc10044; - data[45] = 0x8001004c; - data[46] = 0x7c0803a6; - data[47] = 0x38210050; - data[48] = 0x4e800020; - data[49] = 0x9421ffb8; - data[50] = 0x7c0802a6; - data[51] = 0x90010044; - data[52] = 0xbfa10038; - data[53] = 0x3be10038; - data[54] = 0x90410014; - data[55] = 0x3bc30000; - data[56] = 0x3ba40000; - data[57] = 0x4bffffa1; - data[58] = 0x90620018; - data[59] = 0x81820018; - data[60] = 0x3c60000f; - data[61] = 0x38834240; - data[62] = 0x7cac23d7; - data[63] = 0x40800008; - data[64] = 0x30a5ffff; - data[65] = 0x90be0000; - data[66] = 0x80c20018; - data[67] = 0x38e003e8; - data[68] = 0x7d063bd7; - data[69] = 0x40800008; - data[70] = 0x3108ffff; - data[71] = 0x392003e8; - data[72] = 0x7d484bd6; - data[73] = 0x7d4a49d6; - data[74] = 0x7d4a4011; - data[75] = 0x40800008; - data[76] = 0x314a03e8; - data[77] = 0xb15d0000; - data[78] = 0x383fffc8; - data[79] = 0xbba10038; - data[80] = 0x80010044; - data[81] = 0x7c0803a6; - data[82] = 0x38210048; - data[83] = 0x4e800020; - data[84] = 0x9421ff98; - data[85] = 0xbf21004c; - data[86] = 0x3be10038; - data[87] = 0x3bc30000; - data[88] = 0x3ba40000; - data[89] = 0x3b7e0000; - data[90] = 0x3b800000; - data[91] = 0x7c9be800; - data[92] = 0x40840070; - data[93] = 0xa33b0000; - data[94] = 0x7f9ccb78; - data[95] = 0x3b40000f; - data[96] = 0x578b0001; - data[97] = 0x4182000c; - data[98] = 0x6b8c8000; - data[99] = 0x6d9c0810; - data[100] = 0x57830801; - - try { - StringBuffer sb = new StringBuffer("dumpData: BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + "\n" + 0 + "\tData: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + "\n"); - for (int i = 1; i < 120; i++) { - sb.append(i + "\tData: 0x" - + Integer.toHexString(bdi.readMemSeq(4)) + "\n"); - } - logger.info(sb.toString()); - - logger.info("fastDownload at BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + ", length = " - + bdi.getMaxNofWordsFastDownload()); - bdi.startFastDownload(BASE_ADDR); - bdi.fastDownload(data, bdi.getMaxNofWordsFastDownload()); - bdi.stopFastDownload(); - - sb = new StringBuffer("dumpData: BASE_ADDR = 0x" - + Integer.toHexString(BASE_ADDR) + "\n" + 0 + "\tData: 0x" - + Integer.toHexString(bdi.readMem(BASE_ADDR, 4)) + "\n"); - for (int i = 1; i < 120; i++) { - sb.append(i + "\tData: 0x" - + Integer.toHexString(bdi.readMemSeq(4)) + "\n"); - } - logger.info(sb.toString()); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - private static int[] getSampleData(int length) { - int[] data = new int[length]; - for (int i = 0; i < data.length; i++) { - data[i] = (int) (Math.random() * Integer.MAX_VALUE); - } - return data; - } - - private static void testFill(int baseAddr) throws USBException, - DispatchException, BDIException { - // int length = (int) (1 + Math.random() - // * (bdi.getMaxNofWordsFastDownload() - 1)); - int length = 101; - int[] data = getSampleData(length); - logger.info("BaseAddr: 0x" + Integer.toHexString(baseAddr) - + ", dataLength: " + data.length); - // download data - bdi.startFastDownload(baseAddr); - bdi.fastDownload(data, data.length); - bdi.stopFastDownload(); - // read back data - int[] compare = new int[data.length]; - compare[0] = bdi.readMem(baseAddr, 4); - for (int i = 1; i < compare.length; i++) { - compare[i] = bdi.readMemSeq(4); - } - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < compare.length; i++) { - if (compare[i] != data[i]) { - sb.append("Error at " + i + ", addr: 0x" - + Integer.toHexString(baseAddr + i * 4) - + ", expected: 0x" + Integer.toHexString(data[i]) - + ", read: " + Integer.toHexString(compare[i]) + "\n"); - } - } - if (sb.length() > 0) { - logger.warning(sb.toString()); - } - } - - public static void runFillTests(int nofRuns) { - try { - // BR0 = 01000003H(* 16777219*) - // OR0 = 0FFC00020H(* -4194272*) - // BR1 = 0800003H(* 8388611*) - // OR1 = 0FFE00020H(* -2097120*) - // DMBR = 03H(* 3*) - // DMOR = 07E000000H(* 2113929216*) - // ICTRL = 07H(* 7*) - // RSR = 00H(* 0*) - // DER = 031C7400FH(* 835141647*) - // SRR1 = 03802H(* 14338*) - - bdi.writeMem(0x2FC100, 0x01000003, 4); - bdi.writeMem(0x2FC104, 0x0FFC00020, 4); - bdi.writeMem(0x2FC108, 0x0800003, 4); - bdi.writeMem(0x2FC10C, 0x0FFE00020, 4); - bdi.writeMem(0x2FC140, 3, 4); - bdi.writeMem(0x2FC144, 0x7E000000, 4); - bdi.writeSPR(158, 0x07); - bdi.writeMem(0x2FC288, -1, 4); - bdi.writeSPR(149, 0x031C7400F); - bdi.writeSPR(27, 0x03802); - - for (int i = 0; i < nofRuns; i++) { - testFill(0x03F9800); - testFill(0x03F9BF0); - testFill(0x03F9D84); - testFill(0x03F9AA8); - testFill(0x03F9AE0); - testFill(0x0); - testFill(0x0594); - testFill(0x0D94); - testFill(0x01EA4); - testFill(0x0802000); - testFill(0x0802C10); - testFill(0x0803480); - } - } catch (USBException e) { - e.printStackTrace(); - } catch (DispatchException e) { - e.printStackTrace(); - } catch (BDIException e) { - e.printStackTrace(); - } - } - - public static void button13() { - logger.info("extensive fill test"); - runFillTests(100); - logger.info("test done"); - } - - public static void button14() { - - try { - logger.info("start FillTest"); - FillTest.doFill(); - logger.info("start compare"); - FillTest.doCompare(); - logger.info("FillTest done"); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void button15() { - - try { - logger.info("start FillShort"); - FillTest.doFill2(); - logger.info("start compare"); - FillTest.doCompare(); - logger.info("FillShort done"); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/Dump332.java b/mcdp/src/ch/ntb/mcdp/bdi/test/Dump332.java deleted file mode 100644 index 77f29a1..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/Dump332.java +++ /dev/null @@ -1,135 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import ch.ntb.mcdp.utils.intelHex.IntelHex; -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.bdi.MC68332; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.USBException; - -public class Dump332 { - - private static final String pathHex = "D:\\temp\\332dump.ihx", - pathBin = "D:\\temp\\332dump.bin"; - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi_test; - - public static MC68332 bdi; - - // CromBase = 0H; - // CromSize = 100000H (* 1 MByte kByte *); - // CromCSBAR = CromBase DIV 256 + 7; - // - // CramBase = 100000H; - // CramSize = 040000H; (* 256 kByte *) - // CramCSBAR = CramBase DIV 256 + 5; - - public static void dumpToHex() { - // IntelHex.setFileName(fileName); - IntelHex.openWrite(pathHex); - - // Read Ram - final int BASE_ADDR = 0x100000; - final int MEMORY_SIZE = 0x04000; - - int currentAddress = BASE_ADDR, firstResult; - int[] result; - int hexDataLength = 2 * bdi.getMaxNofLongsFill() + 2, hexDataIndex = 0; - short[] hexData = new short[hexDataLength]; - - logger.info("dumpToHex: memory from BASE_ADDR: 0x" - + Integer.toHexString(BASE_ADDR) + ", size = 0x" - + Integer.toHexString(MEMORY_SIZE)); - try { - // setup base address - firstResult = bdi.readMem(currentAddress, 4); - hexData[hexDataIndex++] = (short) (firstResult / 0x10000); - hexData[hexDataIndex++] = (short) firstResult; - currentAddress += 4; - while (currentAddress < BASE_ADDR + MEMORY_SIZE) { - result = bdi.dumpMem(bdi.getMaxNofLongsFill()); - int i; - for (i = 0; i < result.length; i++) { - hexData[hexDataIndex + i * 2] = (short) (result[i] / 0x10000); - hexData[hexDataIndex + i * 2 + 1] = (short) result[i]; - } - IntelHex.writeDataBlock(currentAddress, hexDataIndex + i * 2, - hexData); - currentAddress += hexDataIndex + i * 2; - hexDataIndex = 0; - } - IntelHex.close(); - logger.info("Dump finished"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private static void write(OutputStream os, int data) throws IOException { - os.write((byte) ((data / 0x1000000) & 0xFF)); - os.write((byte) ((data / 0x10000) & 0xFF)); - os.write((byte) ((data / 0x100) & 0xFF)); - os.write((byte) ((data) & 0xFF)); - } - - public static void dumpToBin() { - - // Read Ram - final int BASE_ADDR = 0x100000; - final int MEMORY_SIZE = 0x04000; - - int currentAddress = BASE_ADDR, firstResult; - int[] result; - - logger.info("dumpToBin: memory from BASE_ADDR: 0x" - + Integer.toHexString(BASE_ADDR) + ", size = 0x" - + Integer.toHexString(MEMORY_SIZE)); - - try { - String path = pathBin.substring(0, pathBin.lastIndexOf('\\')); - File pathFile = new File(path); - pathFile.mkdirs(); - File f = new File(pathBin); - f.createNewFile(); - OutputStream os = new FileOutputStream(f); - - // setup base address - firstResult = bdi.readMem(currentAddress, 4); - write(os, firstResult); - currentAddress += 4; - while (currentAddress < BASE_ADDR + MEMORY_SIZE) { - result = bdi.dumpMem(bdi.getMaxNofLongsFill()); - for (int i = 0; i < result.length; i++) { - write(os, result[i]); - } - currentAddress += result.length * 4; - } - logger.info("Dump finished"); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (DispatchException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (BDIException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/mcdp/src/ch/ntb/mcdp/bdi/test/FillTest.java b/mcdp/src/ch/ntb/mcdp/bdi/test/FillTest.java deleted file mode 100644 index 7aecaa8..0000000 --- a/mcdp/src/ch/ntb/mcdp/bdi/test/FillTest.java +++ /dev/null @@ -1,11016 +0,0 @@ -package ch.ntb.mcdp.bdi.test; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.bdi.MPC555; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.USBException; - -public class FillTest { - - private static McdpLogger logger = LogUtil.ch_ntb_mcdp_bdi_test; - - public static MPC555 bdi; - - static int[] addr = new int[10000]; - static int[] val = new int[10000]; - static int index, baseAddr; - - private static void add(int nix, int[] data, int dataLength) { - logger.info("fill: baseAddr: 0x" + Integer.toHexString(baseAddr) - + ", length: " + dataLength); - for (int i = 0; i < dataLength; i++) { - addr[index + i] = baseAddr + i * 4; - val[index + i] = data[i]; - } - index += dataLength; - baseAddr += dataLength * 4; - } - - public static void doCompare() throws USBException, DispatchException, - BDIException { - for (int i = 0; i < index; i++) { - int result = bdi.readMem(addr[i], 4); - if (val[i] != result) { - logger.severe("Error at " + i + ", addr: 0x" - + Integer.toHexString(addr[i]) + ", expected: 0x" - + Integer.toHexString(val[i]) + ", read: 0x" - + Integer.toHexString(result)); - } - } - } - - public static void doFillShort() throws USBException, DispatchException, - BDIException { - index = 0; - - bdi.writeMem(0x2FC100, 0x01000003, 4); - bdi.writeMem(0x2FC104, 0x0FFC00020, 4); - bdi.writeMem(0x2FC108, 0x0800003, 4); - bdi.writeMem(0x2FC10C, 0x0FFE00020, 4); - bdi.writeMem(0x2FC140, 3, 4); - bdi.writeMem(0x2FC144, 0x7E000000, 4); - bdi.writeSPR(158, 0x07); - bdi.writeMem(0x2FC288, -1, 4); - bdi.writeSPR(149, 0x031C7400F); - bdi.writeSPR(27, 0x03802); - - int length; - int[] data = new int[bdi.getMaxNofWordsFastDownload()]; - - baseAddr = 0x3F9800; - bdi.startFastDownload(baseAddr); - length = 42; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0xA8; - data[5] = 0x80; - data[6] = 0x38; - data[7] = 0x54; - data[8] = 0x68; - data[9] = 0x74; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x3; - data[15] = 0x0; - data[16] = 0x2000; - data[17] = 0x3F9800; - data[18] = 0x6800; - data[19] = 0x800000; - data[20] = 0x200000; - data[21] = 0x2; - data[22] = 0x2000; - data[23] = 0x3E000; - data[24] = 0x40000; - data[25] = 0x30000; - data[26] = 0x1; - data[27] = 0x3FF800; - data[28] = 0x800; - data[29] = 0x1; - data[30] = 0x803730; - data[31] = 0x1FC8CC; - data[32] = 0x30; - data[33] = 0x6; - data[34] = 0x3F98A8; - data[35] = 0x3F9914; - data[36] = 0x3F9ACC; - data[37] = 0x802000; - data[38] = 0x80330C; - data[39] = 0x8034DC; - data[40] = 0x0; - data[41] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F98A8; - bdi.startFastDownload(baseAddr); - length = 27; - data[0] = 0x0; - data[1] = 0x3F98E4; - data[2] = 0x0; - data[3] = 0x3F9908; - data[4] = 0x8; - data[5] = 0x3FA1F0; - data[6] = 0x0; - data[7] = 0x3F98A8; - data[8] = 0x6C; - data[9] = 0x3F9BF0; - data[10] = 0x64C; - data[11] = 0x3FA6D8; - data[12] = 0x8; - data[13] = 0x3FA6E0; - data[14] = 0x28; - data[15] = 0xB; - data[16] = 0x546F7070; - data[17] = 0x634B6572; - data[18] = 0x6E656C00; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0xE9ACBB39; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F9BF0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FFB0; - data[1] = 0xBF810040; - data[2] = 0x3BE10038; - data[3] = 0x3BC30000; - data[4] = 0x3BA40000; - data[5] = 0x3C600030; - data[6] = 0x38836102; - data[7] = 0x38A08000; - data[8] = 0xB0A40000; - data[9] = 0x2C9E0000; - data[10] = 0x4085004C; - data[11] = 0x3CC00030; - data[12] = 0x38E66100; - data[13] = 0x39000000; - data[14] = 0xB1070000; - data[15] = 0x1F9D2710; - data[16] = 0x339CFFFF; - data[17] = 0x2F1C0000; - data[18] = 0x4199FFF8; - data[19] = 0x3D200030; - data[20] = 0x39496100; - data[21] = 0x39608000; - data[22] = 0xB16A0000; - data[23] = 0x1F9D2710; - data[24] = 0x339CFFFF; - data[25] = 0x2F9C0000; - data[26] = 0x419DFFF8; - data[27] = 0x33DEFFFF; - data[28] = 0x4280FFB4; - data[29] = 0x383FFFC8; - data[30] = 0xBB810040; - data[31] = 0x38210050; - data[32] = 0x4E800020; - data[33] = 0x9421FFB0; - data[34] = 0x7C0802A6; - data[35] = 0x9001004C; - data[36] = 0xBFC10044; - data[37] = 0x3BE10038; - data[38] = 0x90410014; - data[39] = 0x7FCC42E6; - data[40] = 0x387E0000; - data[41] = 0x42800008; - data[42] = 0x7FE00008; - data[43] = 0x383FFFC8; - data[44] = 0xBBC10044; - data[45] = 0x8001004C; - data[46] = 0x7C0803A6; - data[47] = 0x38210050; - data[48] = 0x4E800020; - data[49] = 0x9421FFB8; - data[50] = 0x7C0802A6; - data[51] = 0x90010044; - data[52] = 0xBFA10038; - data[53] = 0x3BE10038; - data[54] = 0x90410014; - data[55] = 0x3BC30000; - data[56] = 0x3BA40000; - data[57] = 0x4BFFFFA1; - data[58] = 0x90620018; - data[59] = 0x81820018; - data[60] = 0x3C60000F; - data[61] = 0x38834240; - data[62] = 0x7CAC23D7; - data[63] = 0x40800008; - data[64] = 0x30A5FFFF; - data[65] = 0x90BE0000; - data[66] = 0x80C20018; - data[67] = 0x38E003E8; - data[68] = 0x7D063BD7; - data[69] = 0x40800008; - data[70] = 0x3108FFFF; - data[71] = 0x392003E8; - data[72] = 0x7D484BD6; - data[73] = 0x7D4A49D6; - data[74] = 0x7D4A4011; - data[75] = 0x40800008; - data[76] = 0x314A03E8; - data[77] = 0xB15D0000; - data[78] = 0x383FFFC8; - data[79] = 0xBBA10038; - data[80] = 0x80010044; - data[81] = 0x7C0803A6; - data[82] = 0x38210048; - data[83] = 0x4E800020; - data[84] = 0x9421FF98; - data[85] = 0xBF21004C; - data[86] = 0x3BE10038; - data[87] = 0x3BC30000; - data[88] = 0x3BA40000; - data[89] = 0x3B7E0000; - data[90] = 0x3B800000; - data[91] = 0x7C9BE800; - data[92] = 0x40840070; - data[93] = 0xA33B0000; - data[94] = 0x7F9CCB78; - data[95] = 0x3B40000F; - data[96] = 0x578B0001; - data[97] = 0x4182000C; - data[98] = 0x6B8C8000; - data[99] = 0x6D9C0810; - data[100] = 0x57830801; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x4182000C; - data[1] = 0x6B844000; - data[2] = 0x6C9C0408; - data[3] = 0x57851001; - data[4] = 0x4182000C; - data[5] = 0x6B862000; - data[6] = 0x6CDC0204; - data[7] = 0x579C1838; - data[8] = 0x335AFFFD; - data[9] = 0x2F1A0000; - data[10] = 0x409AFFC4; - data[11] = 0x57870001; - data[12] = 0x41820010; - data[13] = 0x5788083C; - data[14] = 0x6D1C1021; - data[15] = 0x42800008; - data[16] = 0x579C083C; - data[17] = 0x337B0002; - data[18] = 0x4280FF90; - data[19] = 0x3B400010; - data[20] = 0x57890001; - data[21] = 0x41820010; - data[22] = 0x578A083C; - data[23] = 0x6D5C1021; - data[24] = 0x42800008; - data[25] = 0x579C083C; - data[26] = 0x335AFFFF; - data[27] = 0x2F9A0000; - data[28] = 0x409EFFE0; - data[29] = 0x578B843E; - data[30] = 0x386B0000; - data[31] = 0x42800008; - data[32] = 0x7FE00008; - data[33] = 0x383FFFC8; - data[34] = 0xBB21004C; - data[35] = 0x38210068; - data[36] = 0x4E800020; - data[37] = 0x9421FFC0; - data[38] = 0xBFE1003C; - data[39] = 0x3BE10038; - data[40] = 0x42800000; - data[41] = 0x383FFFC8; - data[42] = 0xBBE1003C; - data[43] = 0x38210040; - data[44] = 0x4E800020; - data[45] = 0x9421FFB8; - data[46] = 0x7C0802A6; - data[47] = 0x90010044; - data[48] = 0xBFA10038; - data[49] = 0x3BE10038; - data[50] = 0x90410014; - data[51] = 0x3BC30000; - data[52] = 0x3BA40000; - data[53] = 0x2C9E027E; - data[54] = 0x40860014; - data[55] = 0x2F1D0800; - data[56] = 0x409A000C; - data[57] = 0x3BC00800; - data[58] = 0x7FDE9BA6; - data[59] = 0x2F9E009E; - data[60] = 0x409E000C; - data[61] = 0x3BDD0000; - data[62] = 0x7FDE23A6; - data[63] = 0x383FFFC8; - data[64] = 0xBBA10038; - data[65] = 0x80010044; - data[66] = 0x7C0803A6; - data[67] = 0x38210048; - data[68] = 0x4E800020; - data[69] = 0x9421FF38; - data[70] = 0x7C0802A6; - data[71] = 0x900100C4; - data[72] = 0xBDE10080; - data[73] = 0x3BE10038; - data[74] = 0x90410014; - data[75] = 0x3D800030; - data[76] = 0x386CC000; - data[77] = 0x3C800004; - data[78] = 0x90830000; - data[79] = 0x3CA00030; - data[80] = 0x38C5C284; - data[81] = 0x3CE00090; - data[82] = 0x90E60000; - data[83] = 0x3D000030; - data[84] = 0x3928C284; - data[85] = 0x82090000; - data[86] = 0x560A7801; - data[87] = 0x4182FFF0; - data[88] = 0x3D600030; - data[89] = 0x398B7F80; - data[90] = 0x38600000; - data[91] = 0x906C0000; - data[92] = 0x3860009E; - data[93] = 0x38800007; - data[94] = 0x4BFFFF3D; - data[95] = 0x3C800030; - data[96] = 0x38A4C100; - data[97] = 0x3CC00100; - data[98] = 0x38E60003; - data[99] = 0x90E50000; - data[100] = 0x3D000030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x3928C104; - data[1] = 0x3D40FFC0; - data[2] = 0x396A0020; - data[3] = 0x91690000; - data[4] = 0x3D800030; - data[5] = 0x386CC108; - data[6] = 0x3C800080; - data[7] = 0x38A40003; - data[8] = 0x90A30000; - data[9] = 0x3CC00030; - data[10] = 0x38E6C10C; - data[11] = 0x3D00FFE0; - data[12] = 0x39280020; - data[13] = 0x91270000; - data[14] = 0x3D400030; - data[15] = 0x396AC03C; - data[16] = 0x39800000; - data[17] = 0xB18B0000; - data[18] = 0x3C600030; - data[19] = 0x3883C280; - data[20] = 0x3CA08121; - data[21] = 0x38C50300; - data[22] = 0x90C40000; - data[23] = 0x3CE00030; - data[24] = 0x3907C200; - data[25] = 0x39200001; - data[26] = 0xB1280000; - data[27] = 0x3D400030; - data[28] = 0x396AC288; - data[29] = 0xA1EB0000; - data[30] = 0x55ECD001; - data[31] = 0x4082000C; - data[32] = 0x55E38001; - data[33] = 0x4182008C; - data[34] = 0x3C800030; - data[35] = 0x38A4C004; - data[36] = 0x38C0FF83; - data[37] = 0x90C50000; - data[38] = 0x3CE00030; - data[39] = 0x3907C140; - data[40] = 0x39200001; - data[41] = 0x91280000; - data[42] = 0x3D400030; - data[43] = 0x396AC144; - data[44] = 0x3D807E00; - data[45] = 0x918B0000; - data[46] = 0x3C600100; - data[47] = 0x38832010; - data[48] = 0x82240000; - data[49] = 0x3CA00040; - data[50] = 0x38C59800; - data[51] = 0x3CE00100; - data[52] = 0x39072000; - data[53] = 0x3926FFFC; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - - } - - public static void doFill() throws BDIException, USBException, - DispatchException { - index = 0; - - bdi.writeMem(0x2FC100, 0x01000003, 4); - bdi.writeMem(0x2FC104, 0x0FFC00020, 4); - bdi.writeMem(0x2FC108, 0x0800003, 4); - bdi.writeMem(0x2FC10C, 0x0FFE00020, 4); - bdi.writeMem(0x2FC140, 3, 4); - bdi.writeMem(0x2FC144, 0x7E000000, 4); - bdi.writeSPR(158, 0x07); - bdi.writeMem(0x2FC288, -1, 4); - bdi.writeSPR(149, 0x031C7400F); - bdi.writeSPR(27, 0x03802); - - int length; - int[] data = new int[bdi.getMaxNofWordsFastDownload()]; - - baseAddr = 0x3F9800; - bdi.startFastDownload(baseAddr); - length = 42; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0xA8; - data[5] = 0x80; - data[6] = 0x38; - data[7] = 0x54; - data[8] = 0x68; - data[9] = 0x74; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x3; - data[15] = 0x0; - data[16] = 0x2000; - data[17] = 0x3F9800; - data[18] = 0x6800; - data[19] = 0x800000; - data[20] = 0x200000; - data[21] = 0x2; - data[22] = 0x2000; - data[23] = 0x3E000; - data[24] = 0x40000; - data[25] = 0x30000; - data[26] = 0x1; - data[27] = 0x3FF800; - data[28] = 0x800; - data[29] = 0x1; - data[30] = 0x803730; - data[31] = 0x1FC8CC; - data[32] = 0x30; - data[33] = 0x6; - data[34] = 0x3F98A8; - data[35] = 0x3F9914; - data[36] = 0x3F9ACC; - data[37] = 0x802000; - data[38] = 0x80330C; - data[39] = 0x8034DC; - data[40] = 0x0; - data[41] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F98A8; - bdi.startFastDownload(baseAddr); - length = 27; - data[0] = 0x0; - data[1] = 0x3F98E4; - data[2] = 0x0; - data[3] = 0x3F9908; - data[4] = 0x8; - data[5] = 0x3FA1F0; - data[6] = 0x0; - data[7] = 0x3F98A8; - data[8] = 0x6C; - data[9] = 0x3F9BF0; - data[10] = 0x64C; - data[11] = 0x3FA6D8; - data[12] = 0x8; - data[13] = 0x3FA6E0; - data[14] = 0x28; - data[15] = 0xB; - data[16] = 0x546F7070; - data[17] = 0x634B6572; - data[18] = 0x6E656C00; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0xE9ACBB39; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F9BF0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FFB0; - data[1] = 0xBF810040; - data[2] = 0x3BE10038; - data[3] = 0x3BC30000; - data[4] = 0x3BA40000; - data[5] = 0x3C600030; - data[6] = 0x38836102; - data[7] = 0x38A08000; - data[8] = 0xB0A40000; - data[9] = 0x2C9E0000; - data[10] = 0x4085004C; - data[11] = 0x3CC00030; - data[12] = 0x38E66100; - data[13] = 0x39000000; - data[14] = 0xB1070000; - data[15] = 0x1F9D2710; - data[16] = 0x339CFFFF; - data[17] = 0x2F1C0000; - data[18] = 0x4199FFF8; - data[19] = 0x3D200030; - data[20] = 0x39496100; - data[21] = 0x39608000; - data[22] = 0xB16A0000; - data[23] = 0x1F9D2710; - data[24] = 0x339CFFFF; - data[25] = 0x2F9C0000; - data[26] = 0x419DFFF8; - data[27] = 0x33DEFFFF; - data[28] = 0x4280FFB4; - data[29] = 0x383FFFC8; - data[30] = 0xBB810040; - data[31] = 0x38210050; - data[32] = 0x4E800020; - data[33] = 0x9421FFB0; - data[34] = 0x7C0802A6; - data[35] = 0x9001004C; - data[36] = 0xBFC10044; - data[37] = 0x3BE10038; - data[38] = 0x90410014; - data[39] = 0x7FCC42E6; - data[40] = 0x387E0000; - data[41] = 0x42800008; - data[42] = 0x7FE00008; - data[43] = 0x383FFFC8; - data[44] = 0xBBC10044; - data[45] = 0x8001004C; - data[46] = 0x7C0803A6; - data[47] = 0x38210050; - data[48] = 0x4E800020; - data[49] = 0x9421FFB8; - data[50] = 0x7C0802A6; - data[51] = 0x90010044; - data[52] = 0xBFA10038; - data[53] = 0x3BE10038; - data[54] = 0x90410014; - data[55] = 0x3BC30000; - data[56] = 0x3BA40000; - data[57] = 0x4BFFFFA1; - data[58] = 0x90620018; - data[59] = 0x81820018; - data[60] = 0x3C60000F; - data[61] = 0x38834240; - data[62] = 0x7CAC23D7; - data[63] = 0x40800008; - data[64] = 0x30A5FFFF; - data[65] = 0x90BE0000; - data[66] = 0x80C20018; - data[67] = 0x38E003E8; - data[68] = 0x7D063BD7; - data[69] = 0x40800008; - data[70] = 0x3108FFFF; - data[71] = 0x392003E8; - data[72] = 0x7D484BD6; - data[73] = 0x7D4A49D6; - data[74] = 0x7D4A4011; - data[75] = 0x40800008; - data[76] = 0x314A03E8; - data[77] = 0xB15D0000; - data[78] = 0x383FFFC8; - data[79] = 0xBBA10038; - data[80] = 0x80010044; - data[81] = 0x7C0803A6; - data[82] = 0x38210048; - data[83] = 0x4E800020; - data[84] = 0x9421FF98; - data[85] = 0xBF21004C; - data[86] = 0x3BE10038; - data[87] = 0x3BC30000; - data[88] = 0x3BA40000; - data[89] = 0x3B7E0000; - data[90] = 0x3B800000; - data[91] = 0x7C9BE800; - data[92] = 0x40840070; - data[93] = 0xA33B0000; - data[94] = 0x7F9CCB78; - data[95] = 0x3B40000F; - data[96] = 0x578B0001; - data[97] = 0x4182000C; - data[98] = 0x6B8C8000; - data[99] = 0x6D9C0810; - data[100] = 0x57830801; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x4182000C; - data[1] = 0x6B844000; - data[2] = 0x6C9C0408; - data[3] = 0x57851001; - data[4] = 0x4182000C; - data[5] = 0x6B862000; - data[6] = 0x6CDC0204; - data[7] = 0x579C1838; - data[8] = 0x335AFFFD; - data[9] = 0x2F1A0000; - data[10] = 0x409AFFC4; - data[11] = 0x57870001; - data[12] = 0x41820010; - data[13] = 0x5788083C; - data[14] = 0x6D1C1021; - data[15] = 0x42800008; - data[16] = 0x579C083C; - data[17] = 0x337B0002; - data[18] = 0x4280FF90; - data[19] = 0x3B400010; - data[20] = 0x57890001; - data[21] = 0x41820010; - data[22] = 0x578A083C; - data[23] = 0x6D5C1021; - data[24] = 0x42800008; - data[25] = 0x579C083C; - data[26] = 0x335AFFFF; - data[27] = 0x2F9A0000; - data[28] = 0x409EFFE0; - data[29] = 0x578B843E; - data[30] = 0x386B0000; - data[31] = 0x42800008; - data[32] = 0x7FE00008; - data[33] = 0x383FFFC8; - data[34] = 0xBB21004C; - data[35] = 0x38210068; - data[36] = 0x4E800020; - data[37] = 0x9421FFC0; - data[38] = 0xBFE1003C; - data[39] = 0x3BE10038; - data[40] = 0x42800000; - data[41] = 0x383FFFC8; - data[42] = 0xBBE1003C; - data[43] = 0x38210040; - data[44] = 0x4E800020; - data[45] = 0x9421FFB8; - data[46] = 0x7C0802A6; - data[47] = 0x90010044; - data[48] = 0xBFA10038; - data[49] = 0x3BE10038; - data[50] = 0x90410014; - data[51] = 0x3BC30000; - data[52] = 0x3BA40000; - data[53] = 0x2C9E027E; - data[54] = 0x40860014; - data[55] = 0x2F1D0800; - data[56] = 0x409A000C; - data[57] = 0x3BC00800; - data[58] = 0x7FDE9BA6; - data[59] = 0x2F9E009E; - data[60] = 0x409E000C; - data[61] = 0x3BDD0000; - data[62] = 0x7FDE23A6; - data[63] = 0x383FFFC8; - data[64] = 0xBBA10038; - data[65] = 0x80010044; - data[66] = 0x7C0803A6; - data[67] = 0x38210048; - data[68] = 0x4E800020; - data[69] = 0x9421FF38; - data[70] = 0x7C0802A6; - data[71] = 0x900100C4; - data[72] = 0xBDE10080; - data[73] = 0x3BE10038; - data[74] = 0x90410014; - data[75] = 0x3D800030; - data[76] = 0x386CC000; - data[77] = 0x3C800004; - data[78] = 0x90830000; - data[79] = 0x3CA00030; - data[80] = 0x38C5C284; - data[81] = 0x3CE00090; - data[82] = 0x90E60000; - data[83] = 0x3D000030; - data[84] = 0x3928C284; - data[85] = 0x82090000; - data[86] = 0x560A7801; - data[87] = 0x4182FFF0; - data[88] = 0x3D600030; - data[89] = 0x398B7F80; - data[90] = 0x38600000; - data[91] = 0x906C0000; - data[92] = 0x3860009E; - data[93] = 0x38800007; - data[94] = 0x4BFFFF3D; - data[95] = 0x3C800030; - data[96] = 0x38A4C100; - data[97] = 0x3CC00100; - data[98] = 0x38E60003; - data[99] = 0x90E50000; - data[100] = 0x3D000030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x3928C104; - data[1] = 0x3D40FFC0; - data[2] = 0x396A0020; - data[3] = 0x91690000; - data[4] = 0x3D800030; - data[5] = 0x386CC108; - data[6] = 0x3C800080; - data[7] = 0x38A40003; - data[8] = 0x90A30000; - data[9] = 0x3CC00030; - data[10] = 0x38E6C10C; - data[11] = 0x3D00FFE0; - data[12] = 0x39280020; - data[13] = 0x91270000; - data[14] = 0x3D400030; - data[15] = 0x396AC03C; - data[16] = 0x39800000; - data[17] = 0xB18B0000; - data[18] = 0x3C600030; - data[19] = 0x3883C280; - data[20] = 0x3CA08121; - data[21] = 0x38C50300; - data[22] = 0x90C40000; - data[23] = 0x3CE00030; - data[24] = 0x3907C200; - data[25] = 0x39200001; - data[26] = 0xB1280000; - data[27] = 0x3D400030; - data[28] = 0x396AC288; - data[29] = 0xA1EB0000; - data[30] = 0x55ECD001; - data[31] = 0x4082000C; - data[32] = 0x55E38001; - data[33] = 0x4182008C; - data[34] = 0x3C800030; - data[35] = 0x38A4C004; - data[36] = 0x38C0FF83; - data[37] = 0x90C50000; - data[38] = 0x3CE00030; - data[39] = 0x3907C140; - data[40] = 0x39200001; - data[41] = 0x91280000; - data[42] = 0x3D400030; - data[43] = 0x396AC144; - data[44] = 0x3D807E00; - data[45] = 0x918B0000; - data[46] = 0x3C600100; - data[47] = 0x38832010; - data[48] = 0x82240000; - data[49] = 0x3CA00040; - data[50] = 0x38C59800; - data[51] = 0x3CE00100; - data[52] = 0x39072000; - data[53] = 0x3926FFFC; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F9FF0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x3948FFFC; - data[1] = 0x562BE8FF; - data[2] = 0x7D6903A6; - data[3] = 0x562C077E; - data[4] = 0x7D8103A6; - data[5] = 0x41820018; - data[6] = 0x856A0004; - data[7] = 0x858A0004; - data[8] = 0x95690004; - data[9] = 0x95890004; - data[10] = 0x4200FFF0; - data[11] = 0x38600004; - data[12] = 0x7D63542A; - data[13] = 0x7D634D2A; - data[14] = 0x3C800040; - data[15] = 0x3BC49814; - data[16] = 0x83DE0000; - data[17] = 0x3CBE0040; - data[18] = 0x3BC59808; - data[19] = 0x3A600000; - data[20] = 0x38C00000; - data[21] = 0x90C20000; - data[22] = 0x83BE0000; - data[23] = 0x2C9D0000; - data[24] = 0x40860008; - data[25] = 0x42800184; - data[26] = 0x825D0000; - data[27] = 0x30F20001; - data[28] = 0x54E8103A; - data[29] = 0x7F7D4214; - data[30] = 0x82DB0010; - data[31] = 0x833B001C; - data[32] = 0x387D0000; - data[33] = 0x7C9DCA14; - data[34] = 0x4BFFFCC9; - data[35] = 0x2F030000; - data[36] = 0x419A0014; - data[37] = 0x38600008; - data[38] = 0x38800010; - data[39] = 0x4BFFFB65; - data[40] = 0x4280FFF4; - data[41] = 0x839B0020; - data[42] = 0x833B0024; - data[43] = 0x387C0000; - data[44] = 0x7C9CCA14; - data[45] = 0x4BFFFC9D; - data[46] = 0x2F830000; - data[47] = 0x419E0020; - data[48] = 0x38600010; - data[49] = 0x38800008; - data[50] = 0x4BFFFB39; - data[51] = 0x38600004; - data[52] = 0x38800040; - data[53] = 0x4BFFFB2D; - data[54] = 0x4280FFE8; - data[55] = 0x835B0008; - data[56] = 0x833B000C; - data[57] = 0x831B0028; - data[58] = 0x3938FFFC; - data[59] = 0x395AFFFC; - data[60] = 0x572BE8FF; - data[61] = 0x7D6903A6; - data[62] = 0x572C077E; - data[63] = 0x7D8103A6; - data[64] = 0x41820018; - data[65] = 0x856A0004; - data[66] = 0x858A0004; - data[67] = 0x95690004; - data[68] = 0x95890004; - data[69] = 0x4200FFF0; - data[70] = 0x38600004; - data[71] = 0x7D63542A; - data[72] = 0x7D634D2A; - data[73] = 0x82FB0030; - data[74] = 0x3AB70000; - data[75] = 0x829B0034; - data[76] = 0x7E94AA14; - data[77] = 0x7C95A000; - data[78] = 0x40840014; - data[79] = 0x38800000; - data[80] = 0x90950000; - data[81] = 0x32B50004; - data[82] = 0x4280FFEC; - data[83] = 0x2F130000; - data[84] = 0x419A0070; - data[85] = 0x38BF0040; - data[86] = 0x92C50000; - data[87] = 0x38DF0040; - data[88] = 0x92E60004; - data[89] = 0x801F0040; - data[90] = 0x7C0903A6; - data[91] = 0x805F0044; - data[92] = 0x4E800421; - data[93] = 0x80410014; - data[94] = 0x2F930002; - data[95] = 0x409E0040; - data[96] = 0x3CE00030; - data[97] = 0x3907C018; - data[98] = 0x3D20FFFF; - data[99] = 0x91280000; - data[100] = 0x3D400030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 46; - data[0] = 0x396AC010; - data[1] = 0x3D80FFFF; - data[2] = 0x918B0000; - data[3] = 0x3C600030; - data[4] = 0x3883C014; - data[5] = 0x3CA0FFFF; - data[6] = 0x90A40000; - data[7] = 0x7E0000A6; - data[8] = 0x62108000; - data[9] = 0x7E000124; - data[10] = 0x42800014; - data[11] = 0x3CC00040; - data[12] = 0x38E69E18; - data[13] = 0x90E20010; - data[14] = 0x90420014; - data[15] = 0x81020000; - data[16] = 0x31280001; - data[17] = 0x91220000; - data[18] = 0x32730001; - data[19] = 0x33DE0004; - data[20] = 0x4280FE74; - data[21] = 0x383FFFC8; - data[22] = 0xB9E10080; - data[23] = 0x800100C4; - data[24] = 0x7C0803A6; - data[25] = 0x382100C8; - data[26] = 0x4E800020; - data[27] = 0x9421FFC0; - data[28] = 0x7C0802A6; - data[29] = 0x9001003C; - data[30] = 0xBFE10038; - data[31] = 0x3BE10038; - data[32] = 0x90410014; - data[33] = 0x4BFFFC91; - data[34] = 0x80020010; - data[35] = 0x7C0903A6; - data[36] = 0x80420014; - data[37] = 0x4E800421; - data[38] = 0x80410014; - data[39] = 0x383FFFC8; - data[40] = 0xBBE10038; - data[41] = 0x8001003C; - data[42] = 0x7C0803A6; - data[43] = 0x38210040; - data[44] = 0x4E800020; - data[45] = 0xECF41B66; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F9914; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x3F9950; - data[2] = 0x3F9994; - data[3] = 0x3F9974; - data[4] = 0x18; - data[5] = 0x3FA6A0; - data[6] = 0x0; - data[7] = 0x3F9914; - data[8] = 0x1B8; - data[9] = 0x3FA23C; - data[10] = 0x49C; - data[11] = 0x3FA708; - data[12] = 0x18; - data[13] = 0x3FA720; - data[14] = 0x440; - data[15] = 0x9; - data[16] = 0x546F7070; - data[17] = 0x63486561; - data[18] = 0x70000000; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x3FA6E0; - data[27] = 0x3F9A6C; - data[28] = 0x3F99FC; - data[29] = 0x3F9994; - data[30] = 0xF; - data[31] = 0xF; - data[32] = 0x4; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0xC; - data[36] = 0x3F9914; - data[37] = 0x3F9950; - data[38] = 0x3F99D8; - data[39] = 0x3F99FC; - data[40] = 0x3F9994; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0xC0; - data[49] = 0x12; - data[50] = 0x54797065; - data[51] = 0x44657363; - data[52] = 0x72697074; - data[53] = 0x6F724465; - data[54] = 0x73630000; - data[55] = 0x0; - data[56] = 0xF; - data[57] = 0xF; - data[58] = 0x10; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x8; - data[62] = 0x3F9914; - data[63] = 0x3F9950; - data[64] = 0x3F9A4C; - data[65] = 0x3F9A6C; - data[66] = 0x3F99FC; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x8; - data[76] = 0xC; - data[77] = 0xB4; - data[78] = 0xD; - data[79] = 0x46726565; - data[80] = 0x426C6F63; - data[81] = 0x6B446573; - data[82] = 0x63000000; - data[83] = 0x0; - data[84] = 0xF; - data[85] = 0xF; - data[86] = 0x8; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x4; - data[90] = 0x3F9914; - data[91] = 0x3F9950; - data[92] = 0x3F9AB4; - data[93] = 0x0; - data[94] = 0x3F9A6C; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 9; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0xBC; - data[3] = 0x9; - data[4] = 0x426C6F63; - data[5] = 0x6B446573; - data[6] = 0x63000000; - data[7] = 0x0; - data[8] = 0xEA187BE9; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3FA23C; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FF90; - data[1] = 0x7C000026; - data[2] = 0x9001006C; - data[3] = 0xBF210050; - data[4] = 0x3BE10038; - data[5] = 0x3BC30000; - data[6] = 0x3BA00000; - data[7] = 0x3B800000; - data[8] = 0x7FD92670; - data[9] = 0x2C990009; - data[10] = 0x40850008; - data[11] = 0x3B200009; - data[12] = 0xCB9000A; - data[13] = 0x5723103A; - data[14] = 0x7C821A14; - data[15] = 0x83A40414; - data[16] = 0x2F1D0000; - data[17] = 0x409A0024; - data[18] = 0x2F990009; - data[19] = 0x409C001C; - data[20] = 0x33390001; - data[21] = 0xCB9000A; - data[22] = 0x5725103A; - data[23] = 0x7CC22A14; - data[24] = 0x83A60414; - data[25] = 0x4280FFDC; - data[26] = 0x2C9E0080; - data[27] = 0x40850044; - data[28] = 0x2F1D0000; - data[29] = 0x419A003C; - data[30] = 0x4E600182; - data[31] = 0x41930034; - data[32] = 0xE9D0000; - data[33] = 0x80FD0004; - data[34] = 0x7F9E3800; - data[35] = 0x409D0010; - data[36] = 0xE9D0000; - data[37] = 0x83BD0008; - data[38] = 0x42800008; - data[39] = 0x4E600242; - data[40] = 0x2C9D0000; - data[41] = 0x40860008; - data[42] = 0x4E600242; - data[43] = 0x4280FFD0; - data[44] = 0x2F1D0000; - data[45] = 0x409A0008; - data[46] = 0x42800000; - data[47] = 0xE9D0000; - data[48] = 0x811D000C; - data[49] = 0x2F880000; - data[50] = 0x409E0020; - data[51] = 0xCB9000A; - data[52] = 0x5729103A; - data[53] = 0x7D424A14; - data[54] = 0xE9D0000; - data[55] = 0x817D0008; - data[56] = 0x916A0414; - data[57] = 0x4280001C; - data[58] = 0xE9D0000; - data[59] = 0x819D000C; - data[60] = 0xE8C0000; - data[61] = 0xE9D0000; - data[62] = 0x807D0008; - data[63] = 0x906C0008; - data[64] = 0xE9D0000; - data[65] = 0x809D0008; - data[66] = 0x2C840000; - data[67] = 0x4186001C; - data[68] = 0xE9D0000; - data[69] = 0x80BD0008; - data[70] = 0xE850000; - data[71] = 0xE9D0000; - data[72] = 0x80DD000C; - data[73] = 0x90C5000C; - data[74] = 0xE9D0000; - data[75] = 0x837D0004; - data[76] = 0x80E2000C; - data[77] = 0x7D1B3810; - data[78] = 0x9102000C; - data[79] = 0x7F5ED810; - data[80] = 0x7F592670; - data[81] = 0x2F190000; - data[82] = 0x4099008C; - data[83] = 0x8122000C; - data[84] = 0x7D49D214; - data[85] = 0x9142000C; - data[86] = 0x2F990009; - data[87] = 0x409D0008; - data[88] = 0x3B200009; - data[89] = 0x7D7DF214; - data[90] = 0x3B8B0000; - data[91] = 0xE9C0000; - data[92] = 0x319C0004; - data[93] = 0x919C0000; - data[94] = 0xE9C0000; - data[95] = 0x935C0004; - data[96] = 0xE9C0000; - data[97] = 0xCB9000A; - data[98] = 0x5723103A; - data[99] = 0x7C821A14; - data[100] = 0x80A40414; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x90BC0008; - data[1] = 0xE9C0000; - data[2] = 0x80DC0008; - data[3] = 0x2C860000; - data[4] = 0x41860014; - data[5] = 0xE9C0000; - data[6] = 0x80FC0008; - data[7] = 0xE870000; - data[8] = 0x9387000C; - data[9] = 0xE9C0000; - data[10] = 0x39000000; - data[11] = 0x911C000C; - data[12] = 0xCB9000A; - data[13] = 0x5729103A; - data[14] = 0x7D424A14; - data[15] = 0x938A0414; - data[16] = 0x387D0000; - data[17] = 0x42800008; - data[18] = 0x7FE00008; - data[19] = 0x383FFFC8; - data[20] = 0xBB210050; - data[21] = 0x8001006C; - data[22] = 0x7C0FF120; - data[23] = 0x38210070; - data[24] = 0x4E800020; - data[25] = 0x9421FF90; - data[26] = 0x7C0802A6; - data[27] = 0x9001006C; - data[28] = 0xBF410054; - data[29] = 0x3BE10038; - data[30] = 0x90410014; - data[31] = 0x3B800000; - data[32] = 0x3BC30000; - data[33] = 0x317E0004; - data[34] = 0x318B0010; - data[35] = 0x306CFFFF; - data[36] = 0x54640036; - data[37] = 0x3BC40000; - data[38] = 0x387E0000; - data[39] = 0x4BFFFDD1; - data[40] = 0x3B830000; - data[41] = 0xE9C0000; - data[42] = 0x3CA055AA; - data[43] = 0x38C555AA; - data[44] = 0x90DC0000; - data[45] = 0xE9C0000; - data[46] = 0x3B7C0004; - data[47] = 0x3BA00000; - data[48] = 0x335EFFF8; - data[49] = 0x7F1DD000; - data[50] = 0x41990014; - data[51] = 0x38E00000; - data[52] = 0x7CFBE92E; - data[53] = 0x33BD0004; - data[54] = 0x4280FFEC; - data[55] = 0x387B0000; - data[56] = 0x383FFFC8; - data[57] = 0xBB410054; - data[58] = 0x8001006C; - data[59] = 0x7C0803A6; - data[60] = 0x38210070; - data[61] = 0x4E800020; - data[62] = 0x9421FF90; - data[63] = 0x7C0802A6; - data[64] = 0x9001006C; - data[65] = 0xBF210050; - data[66] = 0x3BE10038; - data[67] = 0x90410014; - data[68] = 0x3BC00000; - data[69] = 0x3B600000; - data[70] = 0x3BC30000; - data[71] = 0xE9E0000; - data[72] = 0x811E0000; - data[73] = 0x31280004; - data[74] = 0x31490010; - data[75] = 0x316AFFFF; - data[76] = 0x556C0036; - data[77] = 0x3BAC0000; - data[78] = 0x387D0000; - data[79] = 0x4BFFFD31; - data[80] = 0x3B630000; - data[81] = 0xE9B0000; - data[82] = 0x93DB0000; - data[83] = 0xE9B0000; - data[84] = 0x3B5B0004; - data[85] = 0x3B800000; - data[86] = 0x333DFFF8; - data[87] = 0x7F9CC800; - data[88] = 0x419D0014; - data[89] = 0x38600000; - data[90] = 0x7C7AE12E; - data[91] = 0x339C0004; - data[92] = 0x4280FFEC; - data[93] = 0x387A0000; - data[94] = 0x383FFFC8; - data[95] = 0xBB210050; - data[96] = 0x8001006C; - data[97] = 0x7C0803A6; - data[98] = 0x38210070; - data[99] = 0x4E800020; - data[100] = 0x9421FFC0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0xBFE1003C; - data[1] = 0x3BE10038; - data[2] = 0x383FFFC8; - data[3] = 0xBBE1003C; - data[4] = 0x38210040; - data[5] = 0x4E800020; - data[6] = 0x9421FF60; - data[7] = 0xBE61006C; - data[8] = 0x3BE10038; - data[9] = 0x3A600000; - data[10] = 0x3C800040; - data[11] = 0x38A49824; - data[12] = 0x82C50000; - data[13] = 0x3CD60040; - data[14] = 0x38E69800; - data[15] = 0x81070004; - data[16] = 0x91020004; - data[17] = 0x3D360040; - data[18] = 0x39499800; - data[19] = 0x816A0008; - data[20] = 0x91620000; - data[21] = 0x82A20004; - data[22] = 0x81820004; - data[23] = 0x80620000; - data[24] = 0x7E8C1A14; - data[25] = 0x38800000; - data[26] = 0x90950000; - data[27] = 0x32B50004; - data[28] = 0x7C95A000; - data[29] = 0x4184FFF0; - data[30] = 0x80A20000; - data[31] = 0x54A6073E; - data[32] = 0x80E20000; - data[33] = 0x7D063810; - data[34] = 0x91020000; - data[35] = 0x81220004; - data[36] = 0x81420000; - data[37] = 0x7D695214; - data[38] = 0x91620008; - data[39] = 0x81820000; - data[40] = 0x9182000C; - data[41] = 0x3BC00000; - data[42] = 0x2F1E0009; - data[43] = 0x41990020; - data[44] = 0xCBE000A; - data[45] = 0x57C3103A; - data[46] = 0x7C821A14; - data[47] = 0x38A00000; - data[48] = 0x90A40414; - data[49] = 0x33DE0001; - data[50] = 0x4280FFE0; - data[51] = 0x82620004; - data[52] = 0xE930000; - data[53] = 0xE930000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3FA63C; - bdi.startFastDownload(baseAddr); - length = 39; - data[0] = 0x38D30004; - data[1] = 0x90D30000; - data[2] = 0xE930000; - data[3] = 0x80E20000; - data[4] = 0x90F30004; - data[5] = 0xE930000; - data[6] = 0x39000000; - data[7] = 0x91130008; - data[8] = 0xE930000; - data[9] = 0x81330004; - data[10] = 0x7D3E2670; - data[11] = 0x2F9E0009; - data[12] = 0x409D0008; - data[13] = 0x3BC00009; - data[14] = 0xCBE000A; - data[15] = 0x57CA103A; - data[16] = 0x7D625214; - data[17] = 0x926B0414; - data[18] = 0xE930000; - data[19] = 0x39800000; - data[20] = 0x9193000C; - data[21] = 0x383FFFC8; - data[22] = 0xBA61006C; - data[23] = 0x382100A0; - data[24] = 0x4E800020; - data[25] = 0x9421FFC0; - data[26] = 0x7C0802A6; - data[27] = 0x9001003C; - data[28] = 0xBFE10038; - data[29] = 0x3BE10038; - data[30] = 0x90410014; - data[31] = 0x4BFFFEC5; - data[32] = 0x383FFFC8; - data[33] = 0xBBE10038; - data[34] = 0x8001003C; - data[35] = 0x7C0803A6; - data[36] = 0x38210040; - data[37] = 0x4E800020; - data[38] = 0x340DD8B; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3F9ACC; - bdi.startFastDownload(baseAddr); - length = 73; - data[0] = 0x10; - data[1] = 0x3FABA0; - data[2] = 0x3FABA4; - data[3] = 0x3FABA8; - data[4] = 0x3FABAC; - data[5] = 0x3FABB0; - data[6] = 0x3FABB4; - data[7] = 0x3FABB8; - data[8] = 0x3FABBC; - data[9] = 0x3FABC0; - data[10] = 0x3FABC4; - data[11] = 0x3FABC8; - data[12] = 0x3FABCC; - data[13] = 0x3FABD0; - data[14] = 0x3FABD4; - data[15] = 0x3FABD8; - data[16] = 0x3FABDC; - data[17] = 0x3F9B48; - data[18] = 0x3F9B8C; - data[19] = 0x3F9B6C; - data[20] = 0x10; - data[21] = 0x1FBC; - data[22] = 0x0; - data[23] = 0x3F9ACC; - data[24] = 0x124; - data[25] = 0x0; - data[26] = 0x1FF4; - data[27] = 0x3FAB60; - data[28] = 0x10; - data[29] = 0x3FAB70; - data[30] = 0x70; - data[31] = 0xF; - data[32] = 0x546F7070; - data[33] = 0x63457863; - data[34] = 0x65707469; - data[35] = 0x6F6E7300; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x3FA720; - data[42] = 0x3FA6E0; - data[43] = 0x3F9B8C; - data[44] = 0x0; - data[45] = 0x3FAB70; - data[46] = 0xF; - data[47] = 0xF; - data[48] = 0x14; - data[49] = 0x0; - data[50] = 0x1; - data[51] = 0xC; - data[52] = 0x3F9ACC; - data[53] = 0x3F9B48; - data[54] = 0x3F9BD4; - data[55] = 0x0; - data[56] = 0x3F9B8C; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x10; - data[65] = 0xBC; - data[66] = 0xD; - data[67] = 0x496E7465; - data[68] = 0x72727570; - data[69] = 0x74446573; - data[70] = 0x63000000; - data[71] = 0x0; - data[72] = 0xEBD013B6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FFC0; - data[1] = 0xBFC10038; - data[2] = 0x3BE10038; - data[3] = 0x3BC30000; - data[4] = 0x80620008; - data[5] = 0x30830001; - data[6] = 0x90820008; - data[7] = 0x383FFFC8; - data[8] = 0xBBC10038; - data[9] = 0x38210040; - data[10] = 0x4E800020; - data[11] = 0x9421FFB0; - data[12] = 0xBF810040; - data[13] = 0x3BE10038; - data[14] = 0x3BC30000; - data[15] = 0x3BA40000; - data[16] = 0x3CA00030; - data[17] = 0x38C56102; - data[18] = 0x38E08000; - data[19] = 0xB0E60000; - data[20] = 0x2C9E0000; - data[21] = 0x4085004C; - data[22] = 0x3D000030; - data[23] = 0x39286100; - data[24] = 0x39400000; - data[25] = 0xB1490000; - data[26] = 0x1F9D2710; - data[27] = 0x339CFFFF; - data[28] = 0x2F1C0000; - data[29] = 0x4199FFF8; - data[30] = 0x3D600030; - data[31] = 0x398B6100; - data[32] = 0x38608000; - data[33] = 0xB06C0000; - data[34] = 0x1F9D2710; - data[35] = 0x339CFFFF; - data[36] = 0x2F9C0000; - data[37] = 0x419DFFF8; - data[38] = 0x33DEFFFF; - data[39] = 0x4280FFB4; - data[40] = 0x383FFFC8; - data[41] = 0xBB810040; - data[42] = 0x38210050; - data[43] = 0x4E800020; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x9421FF24; - data[47] = 0x900100C0; - data[48] = 0x7C1A02A6; - data[49] = 0x900100C4; - data[50] = 0x7C1B02A6; - data[51] = 0x900100C8; - data[52] = 0x7C1113A6; - data[53] = 0x7C0802A6; - data[54] = 0x900100D0; - data[55] = 0x7C000026; - data[56] = 0x900100D4; - data[57] = 0x7C0902A6; - data[58] = 0x900100D8; - data[59] = 0xBC410048; - data[60] = 0x3BE10038; - data[61] = 0x3C400040; - data[62] = 0x3842AB70; - data[63] = 0x90410014; - data[64] = 0x3C800040; - data[65] = 0x3824FFE0; - data[66] = 0x3CA00100; - data[67] = 0x38C52014; - data[68] = 0x83C60000; - data[69] = 0x3CFE0100; - data[70] = 0x39072000; - data[71] = 0x83A80008; - data[72] = 0x839D0000; - data[73] = 0x313D0004; - data[74] = 0x578A103A; - data[75] = 0x7D695214; - data[76] = 0x836B0030; - data[77] = 0x385B0000; - data[78] = 0x319D0004; - data[79] = 0x5783103A; - data[80] = 0x7C8C1A14; - data[81] = 0x83640010; - data[82] = 0x387B0000; - data[83] = 0x7C7A03A6; - data[84] = 0x38603802; - data[85] = 0x7C7B03A6; - data[86] = 0x4C000064; - data[87] = 0x383FFFC8; - data[88] = 0xB8410048; - data[89] = 0x800100D8; - data[90] = 0x7C0903A6; - data[91] = 0x800100D4; - data[92] = 0x7C0FF120; - data[93] = 0x800100D0; - data[94] = 0x7C0803A6; - data[95] = 0x800100C8; - data[96] = 0x7C1B03A6; - data[97] = 0x800100C4; - data[98] = 0x7C1A03A6; - data[99] = 0x800100C0; - data[100] = 0x382100DC; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x4C000064; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421FF34; - data[28] = 0x900100B0; - data[29] = 0x7C1A02A6; - data[30] = 0x900100B4; - data[31] = 0x7C1B02A6; - data[32] = 0x900100B8; - data[33] = 0x7C1113A6; - data[34] = 0x7C0802A6; - data[35] = 0x900100C0; - data[36] = 0x7C000026; - data[37] = 0x900100C4; - data[38] = 0x7C0902A6; - data[39] = 0x900100C8; - data[40] = 0xBC410038; - data[41] = 0x3BE10038; - data[42] = 0x3C400040; - data[43] = 0x3842AB70; - data[44] = 0x90410014; - data[45] = 0x80A20000; - data[46] = 0x30C50001; - data[47] = 0x90C20000; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4BFFFDD1; - data[51] = 0x4280FFF4; - data[52] = 0x383FFFC8; - data[53] = 0xB8410038; - data[54] = 0x800100C8; - data[55] = 0x7C0903A6; - data[56] = 0x800100C4; - data[57] = 0x7C0FF120; - data[58] = 0x800100C0; - data[59] = 0x7C0803A6; - data[60] = 0x800100B8; - data[61] = 0x7C1B03A6; - data[62] = 0x800100B4; - data[63] = 0x7C1A03A6; - data[64] = 0x800100B0; - data[65] = 0x382100CC; - data[66] = 0x4C000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421FFA0; - data[92] = 0x7C0802A6; - data[93] = 0x9001005C; - data[94] = 0xBF610048; - data[95] = 0x3BE10038; - data[96] = 0x90410014; - data[97] = 0x3B800000; - data[98] = 0x3CE00030; - data[99] = 0x3907C010; - data[100] = 0xA3A80000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x3BC00010; - data[1] = 0x33DEFFFF; - data[2] = 0x7FC9F0F8; - data[3] = 0x5FA94801; - data[4] = 0x4182011C; - data[5] = 0x315E0001; - data[6] = 0x3960000F; - data[7] = 0x3D808000; - data[8] = 0x7D8C5E30; - data[9] = 0x7D8C5030; - data[10] = 0x5D8C583E; - data[11] = 0x558C083E; - data[12] = 0x3C600030; - data[13] = 0x3883C014; - data[14] = 0xB1840000; - data[15] = 0x7C1013A6; - data[16] = 0x20BE000F; - data[17] = 0xCA50010; - data[18] = 0x54A6103A; - data[19] = 0x7CE23214; - data[20] = 0x83870030; - data[21] = 0x57C8F801; - data[22] = 0x41820040; - data[23] = 0x387C0000; - data[24] = 0x8123FFFC; - data[25] = 0x8009FFF0; - data[26] = 0x7C0903A6; - data[27] = 0x8049FFF4; - data[28] = 0x4E800421; - data[29] = 0x80410014; - data[30] = 0x39400001; - data[31] = 0x7D4AF030; - data[32] = 0x3D600030; - data[33] = 0x398BC010; - data[34] = 0xB14C0000; - data[35] = 0x3BC00000; - data[36] = 0x4280009C; - data[37] = 0x42800094; - data[38] = 0xE9C0000; - data[39] = 0x807C0000; - data[40] = 0xA3630000; - data[41] = 0xE9C0000; - data[42] = 0x809C0004; - data[43] = 0x7C8520F8; - data[44] = 0x5F652801; - data[45] = 0x41820048; - data[46] = 0xE9C0000; - data[47] = 0x80DC0008; - data[48] = 0xA3660000; - data[49] = 0xE9C0000; - data[50] = 0x80FC000C; - data[51] = 0x7CE838F8; - data[52] = 0x5F684001; - data[53] = 0x41820028; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x400; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x387C0000; - data[1] = 0x8123FFFC; - data[2] = 0x8009FFF0; - data[3] = 0x7C0903A6; - data[4] = 0x8049FFF4; - data[5] = 0x4E800421; - data[6] = 0x80410014; - data[7] = 0x3BC00000; - data[8] = 0x42800034; - data[9] = 0xE9C0000; - data[10] = 0x815C0010; - data[11] = 0x2C8A0000; - data[12] = 0x41860010; - data[13] = 0xE9C0000; - data[14] = 0x839C0010; - data[15] = 0x42800014; - data[16] = 0x81620008; - data[17] = 0x318B0001; - data[18] = 0x91820008; - data[19] = 0x42800008; - data[20] = 0x4280FF2C; - data[21] = 0x2F1E0000; - data[22] = 0x409AFED4; - data[23] = 0x383FFFC8; - data[24] = 0xBB610048; - data[25] = 0x8001005C; - data[26] = 0x7C0803A6; - data[27] = 0x38210060; - data[28] = 0x4E800020; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421FF28; - data[65] = 0x900100BC; - data[66] = 0x7C1A02A6; - data[67] = 0x900100C0; - data[68] = 0x7C1B02A6; - data[69] = 0x900100C4; - data[70] = 0x7C1113A6; - data[71] = 0x7C0802A6; - data[72] = 0x900100CC; - data[73] = 0x7C000026; - data[74] = 0x900100D0; - data[75] = 0x7C0902A6; - data[76] = 0x900100D4; - data[77] = 0xBC410044; - data[78] = 0x3BE10038; - data[79] = 0x3C400040; - data[80] = 0x3842AB70; - data[81] = 0x90410014; - data[82] = 0x80620004; - data[83] = 0x30830001; - data[84] = 0x90820004; - data[85] = 0x3CA00030; - data[86] = 0x38C5C014; - data[87] = 0xA3C60000; - data[88] = 0x4BFFFDA1; - data[89] = 0x7C1113A6; - data[90] = 0x3CE00030; - data[91] = 0x3907C014; - data[92] = 0xB3C80000; - data[93] = 0x383FFFC8; - data[94] = 0xB8410044; - data[95] = 0x800100D4; - data[96] = 0x7C0903A6; - data[97] = 0x800100D0; - data[98] = 0x7C0FF120; - data[99] = 0x800100CC; - data[100] = 0x7C0803A6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x800100C4; - data[1] = 0x7C1B03A6; - data[2] = 0x800100C0; - data[3] = 0x7C1A03A6; - data[4] = 0x800100BC; - data[5] = 0x382100D8; - data[6] = 0x4C000064; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421FF34; - data[28] = 0x900100B0; - data[29] = 0x7C1A02A6; - data[30] = 0x900100B4; - data[31] = 0x7C1B02A6; - data[32] = 0x900100B8; - data[33] = 0x7C1113A6; - data[34] = 0x7C0802A6; - data[35] = 0x900100C0; - data[36] = 0x7C000026; - data[37] = 0x900100C4; - data[38] = 0x7C0902A6; - data[39] = 0x900100C8; - data[40] = 0xBC410038; - data[41] = 0x3BE10038; - data[42] = 0x3C400040; - data[43] = 0x3842AB70; - data[44] = 0x90410014; - data[45] = 0x8122000C; - data[46] = 0x31490001; - data[47] = 0x9142000C; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4BFFF9D1; - data[51] = 0x4280FFF4; - data[52] = 0x383FFFC8; - data[53] = 0xB8410038; - data[54] = 0x800100C8; - data[55] = 0x7C0903A6; - data[56] = 0x800100C4; - data[57] = 0x7C0FF120; - data[58] = 0x800100C0; - data[59] = 0x7C0803A6; - data[60] = 0x800100B8; - data[61] = 0x7C1B03A6; - data[62] = 0x800100B4; - data[63] = 0x7C1A03A6; - data[64] = 0x800100B0; - data[65] = 0x382100CC; - data[66] = 0x4C000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421FF34; - data[92] = 0x900100B0; - data[93] = 0x7C1A02A6; - data[94] = 0x900100B4; - data[95] = 0x7C1B02A6; - data[96] = 0x900100B8; - data[97] = 0x7C1113A6; - data[98] = 0x7C0802A6; - data[99] = 0x900100C0; - data[100] = 0x7C000026; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x900100C4; - data[1] = 0x7C0902A6; - data[2] = 0x900100C8; - data[3] = 0xBC410038; - data[4] = 0x3BE10038; - data[5] = 0x3C400040; - data[6] = 0x3842AB70; - data[7] = 0x90410014; - data[8] = 0x81620010; - data[9] = 0x318B0001; - data[10] = 0x91820010; - data[11] = 0x38600010; - data[12] = 0x38800010; - data[13] = 0x4BFFF8D1; - data[14] = 0x4280FFF4; - data[15] = 0x383FFFC8; - data[16] = 0xB8410038; - data[17] = 0x800100C8; - data[18] = 0x7C0903A6; - data[19] = 0x800100C4; - data[20] = 0x7C0FF120; - data[21] = 0x800100C0; - data[22] = 0x7C0803A6; - data[23] = 0x800100B8; - data[24] = 0x7C1B03A6; - data[25] = 0x800100B4; - data[26] = 0x7C1A03A6; - data[27] = 0x800100B0; - data[28] = 0x382100CC; - data[29] = 0x4C000064; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x800; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FF34; - data[1] = 0x900100B0; - data[2] = 0x7C1A02A6; - data[3] = 0x900100B4; - data[4] = 0x7C1B02A6; - data[5] = 0x900100B8; - data[6] = 0x7C1113A6; - data[7] = 0x7C0802A6; - data[8] = 0x900100C0; - data[9] = 0x7C000026; - data[10] = 0x900100C4; - data[11] = 0x7C0902A6; - data[12] = 0x900100C8; - data[13] = 0xBC410038; - data[14] = 0x3BE10038; - data[15] = 0x3C400040; - data[16] = 0x3842AB70; - data[17] = 0x90410014; - data[18] = 0x80620014; - data[19] = 0x30830001; - data[20] = 0x90820014; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4BFFF7D1; - data[24] = 0x4280FFF4; - data[25] = 0x383FFFC8; - data[26] = 0xB8410038; - data[27] = 0x800100C8; - data[28] = 0x7C0903A6; - data[29] = 0x800100C4; - data[30] = 0x7C0FF120; - data[31] = 0x800100C0; - data[32] = 0x7C0803A6; - data[33] = 0x800100B8; - data[34] = 0x7C1B03A6; - data[35] = 0x800100B4; - data[36] = 0x7C1A03A6; - data[37] = 0x800100B0; - data[38] = 0x382100CC; - data[39] = 0x4C000064; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421FF28; - data[65] = 0x900100BC; - data[66] = 0x7C1A02A6; - data[67] = 0x900100C0; - data[68] = 0x7C1B02A6; - data[69] = 0x900100C4; - data[70] = 0x7C1113A6; - data[71] = 0x7C0802A6; - data[72] = 0x900100CC; - data[73] = 0x7C000026; - data[74] = 0x900100D0; - data[75] = 0x7C0902A6; - data[76] = 0x900100D4; - data[77] = 0xBC410044; - data[78] = 0x3BE10038; - data[79] = 0x3C400040; - data[80] = 0x3842AB70; - data[81] = 0x80A20018; - data[82] = 0x30C50001; - data[83] = 0x90C20018; - data[84] = 0x383FFFC8; - data[85] = 0xB8410044; - data[86] = 0x800100D4; - data[87] = 0x7C0903A6; - data[88] = 0x800100D0; - data[89] = 0x7C0FF120; - data[90] = 0x800100CC; - data[91] = 0x7C0803A6; - data[92] = 0x800100C4; - data[93] = 0x7C1B03A6; - data[94] = 0x800100C0; - data[95] = 0x7C1A03A6; - data[96] = 0x800100BC; - data[97] = 0x382100D8; - data[98] = 0x4C000064; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0xC00; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FF34; - data[1] = 0x900100B0; - data[2] = 0x7C1A02A6; - data[3] = 0x900100B4; - data[4] = 0x7C1B02A6; - data[5] = 0x900100B8; - data[6] = 0x7C1113A6; - data[7] = 0x7C0802A6; - data[8] = 0x900100C0; - data[9] = 0x7C000026; - data[10] = 0x900100C4; - data[11] = 0x7C0902A6; - data[12] = 0x900100C8; - data[13] = 0xBC410038; - data[14] = 0x3BE10038; - data[15] = 0x3C400040; - data[16] = 0x3842AB70; - data[17] = 0x90410014; - data[18] = 0x80E2001C; - data[19] = 0x31070001; - data[20] = 0x9102001C; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4BFFF3D1; - data[24] = 0x4280FFF4; - data[25] = 0x383FFFC8; - data[26] = 0xB8410038; - data[27] = 0x800100C8; - data[28] = 0x7C0903A6; - data[29] = 0x800100C4; - data[30] = 0x7C0FF120; - data[31] = 0x800100C0; - data[32] = 0x7C0803A6; - data[33] = 0x800100B8; - data[34] = 0x7C1B03A6; - data[35] = 0x800100B4; - data[36] = 0x7C1A03A6; - data[37] = 0x800100B0; - data[38] = 0x382100CC; - data[39] = 0x4C000064; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421FF34; - data[65] = 0x900100B0; - data[66] = 0x7C1A02A6; - data[67] = 0x900100B4; - data[68] = 0x7C1B02A6; - data[69] = 0x900100B8; - data[70] = 0x7C1113A6; - data[71] = 0x7C0802A6; - data[72] = 0x900100C0; - data[73] = 0x7C000026; - data[74] = 0x900100C4; - data[75] = 0x7C0902A6; - data[76] = 0x900100C8; - data[77] = 0xBC410038; - data[78] = 0x3BE10038; - data[79] = 0x3C400040; - data[80] = 0x3842AB70; - data[81] = 0x90410014; - data[82] = 0x81220020; - data[83] = 0x31490001; - data[84] = 0x91420020; - data[85] = 0x38600010; - data[86] = 0x38800010; - data[87] = 0x4BFFF2D1; - data[88] = 0x4280FFF4; - data[89] = 0x383FFFC8; - data[90] = 0xB8410038; - data[91] = 0x800100C8; - data[92] = 0x7C0903A6; - data[93] = 0x800100C4; - data[94] = 0x7C0FF120; - data[95] = 0x800100C0; - data[96] = 0x7C0803A6; - data[97] = 0x800100B8; - data[98] = 0x7C1B03A6; - data[99] = 0x800100B4; - data[100] = 0x7C1A03A6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x800100B0; - data[1] = 0x382100CC; - data[2] = 0x4C000064; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421FF34; - data[28] = 0x900100B0; - data[29] = 0x7C1A02A6; - data[30] = 0x900100B4; - data[31] = 0x7C1B02A6; - data[32] = 0x900100B8; - data[33] = 0x7C1113A6; - data[34] = 0x7C0802A6; - data[35] = 0x900100C0; - data[36] = 0x7C000026; - data[37] = 0x900100C4; - data[38] = 0x7C0902A6; - data[39] = 0x900100C8; - data[40] = 0xBC410038; - data[41] = 0x3BE10038; - data[42] = 0x3C400040; - data[43] = 0x3842AB70; - data[44] = 0x90410014; - data[45] = 0x81620024; - data[46] = 0x318B0001; - data[47] = 0x91820024; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4BFFF1D1; - data[51] = 0x4280FFF4; - data[52] = 0x383FFFC8; - data[53] = 0xB8410038; - data[54] = 0x800100C8; - data[55] = 0x7C0903A6; - data[56] = 0x800100C4; - data[57] = 0x7C0FF120; - data[58] = 0x800100C0; - data[59] = 0x7C0803A6; - data[60] = 0x800100B8; - data[61] = 0x7C1B03A6; - data[62] = 0x800100B4; - data[63] = 0x7C1A03A6; - data[64] = 0x800100B0; - data[65] = 0x382100CC; - data[66] = 0x4C000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1000; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FF34; - data[1] = 0x900100B0; - data[2] = 0x7C1A02A6; - data[3] = 0x900100B4; - data[4] = 0x7C1B02A6; - data[5] = 0x900100B8; - data[6] = 0x7C1113A6; - data[7] = 0x7C0802A6; - data[8] = 0x900100C0; - data[9] = 0x7C000026; - data[10] = 0x900100C4; - data[11] = 0x7C0902A6; - data[12] = 0x900100C8; - data[13] = 0xBC410038; - data[14] = 0x3BE10038; - data[15] = 0x3C400040; - data[16] = 0x3842AB70; - data[17] = 0x90410014; - data[18] = 0x80620028; - data[19] = 0x30830001; - data[20] = 0x90820028; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4BFFEFD1; - data[24] = 0x4280FFF4; - data[25] = 0x383FFFC8; - data[26] = 0xB8410038; - data[27] = 0x800100C8; - data[28] = 0x7C0903A6; - data[29] = 0x800100C4; - data[30] = 0x7C0FF120; - data[31] = 0x800100C0; - data[32] = 0x7C0803A6; - data[33] = 0x800100B8; - data[34] = 0x7C1B03A6; - data[35] = 0x800100B4; - data[36] = 0x7C1A03A6; - data[37] = 0x800100B0; - data[38] = 0x382100CC; - data[39] = 0x4C000064; - data[40] = 0x9421FFB0; - data[41] = 0x7C0802A6; - data[42] = 0x9001004C; - data[43] = 0xBFA10040; - data[44] = 0x3BE10038; - data[45] = 0x90410014; - data[46] = 0x3BA00000; - data[47] = 0x8062FFFC; - data[48] = 0x8042FFF4; - data[49] = 0x483F9405; - data[50] = 0x80410014; - data[51] = 0x3BA30000; - data[52] = 0x3BC00000; - data[53] = 0x2F9E000F; - data[54] = 0x419D001C; - data[55] = 0xCBE0010; - data[56] = 0x57C5103A; - data[57] = 0x7CC22A14; - data[58] = 0x93A60030; - data[59] = 0x33DE0001; - data[60] = 0x4280FFE4; - data[61] = 0x383FFFC8; - data[62] = 0xBBA10040; - data[63] = 0x8001004C; - data[64] = 0x7C0803A6; - data[65] = 0x38210050; - data[66] = 0x4E800020; - data[67] = 0x9421FFB0; - data[68] = 0x7C0802A6; - data[69] = 0x9001004C; - data[70] = 0xBFC10044; - data[71] = 0x3BE10038; - data[72] = 0x90410014; - data[73] = 0x3BC00000; - data[74] = 0x7FD603A6; - data[75] = 0x383FFFC8; - data[76] = 0xBBC10044; - data[77] = 0x8001004C; - data[78] = 0x7C0803A6; - data[79] = 0x38210050; - data[80] = 0x4E800020; - data[81] = 0x9421FFB8; - data[82] = 0xBFA1003C; - data[83] = 0x3BE10038; - data[84] = 0x3BC30000; - data[85] = 0x3BA40000; - data[86] = 0x57A7083C; - data[87] = 0xCA70010; - data[88] = 0x54E8103A; - data[89] = 0x7D224214; - data[90] = 0x93C90030; - data[91] = 0x383FFFC8; - data[92] = 0xBBA1003C; - data[93] = 0x38210048; - data[94] = 0x4E800020; - data[95] = 0x9421FFB8; - data[96] = 0xBFA1003C; - data[97] = 0x3BE10038; - data[98] = 0x3BC30000; - data[99] = 0x3BA40000; - data[100] = 0xE9E0000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x57AA083C; - data[1] = 0x316A0001; - data[2] = 0xCAB0010; - data[3] = 0x556C103A; - data[4] = 0x7C626214; - data[5] = 0x80830030; - data[6] = 0x909E0010; - data[7] = 0x57A5083C; - data[8] = 0x30C50001; - data[9] = 0xCA60010; - data[10] = 0x54C7103A; - data[11] = 0x7D023A14; - data[12] = 0x93C80030; - data[13] = 0x383FFFC8; - data[14] = 0xBBA1003C; - data[15] = 0x38210048; - data[16] = 0x4E800020; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1400; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1800; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1C00; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 51; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x9421FFC0; - data[31] = 0xBFE1003C; - data[32] = 0x3BE10038; - data[33] = 0x383FFFC8; - data[34] = 0xBBE1003C; - data[35] = 0x38210040; - data[36] = 0x4E800020; - data[37] = 0x9421FFC0; - data[38] = 0x7C0802A6; - data[39] = 0x9001003C; - data[40] = 0xBFE10038; - data[41] = 0x3BE10038; - data[42] = 0x90410014; - data[43] = 0x4BFFF0CD; - data[44] = 0x383FFFC8; - data[45] = 0xBBE10038; - data[46] = 0x8001003C; - data[47] = 0x7C0803A6; - data[48] = 0x38210040; - data[49] = 0x4E800020; - data[50] = 0x50C5598E; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802000; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x26; - data[1] = 0x80326C; - data[2] = 0x803304; - data[3] = 0x803268; - data[4] = 0x803270; - data[5] = 0x803274; - data[6] = 0x803278; - data[7] = 0x80327C; - data[8] = 0x803280; - data[9] = 0x803284; - data[10] = 0x803288; - data[11] = 0x80328C; - data[12] = 0x803290; - data[13] = 0x803294; - data[14] = 0x803298; - data[15] = 0x80329C; - data[16] = 0x8032A0; - data[17] = 0x8032A4; - data[18] = 0x8032A8; - data[19] = 0x8032AC; - data[20] = 0x8032B0; - data[21] = 0x8032B4; - data[22] = 0x8032B8; - data[23] = 0x8032BC; - data[24] = 0x8032C0; - data[25] = 0x8032C4; - data[26] = 0x8032C8; - data[27] = 0x8032CC; - data[28] = 0x8032D0; - data[29] = 0x8032D4; - data[30] = 0x8032D8; - data[31] = 0x8032DC; - data[32] = 0x8032E0; - data[33] = 0x8032E4; - data[34] = 0x8032E8; - data[35] = 0x8032EC; - data[36] = 0x8032F0; - data[37] = 0x8032F4; - data[38] = 0x8032F8; - data[39] = 0x8020D4; - data[40] = 0x802130; - data[41] = 0x8020F8; - data[42] = 0x18; - data[43] = 0x80320C; - data[44] = 0x0; - data[45] = 0x802000; - data[46] = 0x27C; - data[47] = 0x80227C; - data[48] = 0xFC8; - data[49] = 0x803244; - data[50] = 0x18; - data[51] = 0x80325C; - data[52] = 0xB0; - data[53] = 0xA; - data[54] = 0x546F7070; - data[55] = 0x63546173; - data[56] = 0x6B730000; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x3FA720; - data[63] = 0x3FA6E0; - data[64] = 0x3FA720; - data[65] = 0x802220; - data[66] = 0x8021A4; - data[67] = 0x802130; - data[68] = 0x8022F0; - data[69] = 0x80325C; - data[70] = 0x802370; - data[71] = 0x80325C; - data[72] = 0x8022B4; - data[73] = 0x80325C; - data[74] = 0xF; - data[75] = 0xF; - data[76] = 0x24; - data[77] = 0x0; - data[78] = 0x3; - data[79] = 0xC; - data[80] = 0x802000; - data[81] = 0x8020D4; - data[82] = 0x802174; - data[83] = 0x8021A4; - data[84] = 0x802130; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0xC0; - data[93] = 0x8; - data[94] = 0x5461736B; - data[95] = 0x44657363; - data[96] = 0x0; - data[97] = 0x8022F0; - data[98] = 0x80325C; - data[99] = 0x802370; - data[100] = 0x80325C; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 58; - data[0] = 0x8023F4; - data[1] = 0x80325C; - data[2] = 0x0; - data[3] = 0xC; - data[4] = 0x24; - data[5] = 0x1; - data[6] = 0x3; - data[7] = 0x8; - data[8] = 0x802000; - data[9] = 0x8020D4; - data[10] = 0x8021E8; - data[11] = 0x802220; - data[12] = 0x802130; - data[13] = 0x8021A4; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0xC0; - data[21] = 0xD; - data[22] = 0x4572726F; - data[23] = 0x72546173; - data[24] = 0x6B446573; - data[25] = 0x63000000; - data[26] = 0x0; - data[27] = 0x8022F0; - data[28] = 0x80325C; - data[29] = 0x802370; - data[30] = 0x80325C; - data[31] = 0x8031EC; - data[32] = 0x80325C; - data[33] = 0x0; - data[34] = 0xC; - data[35] = 0x24; - data[36] = 0x1; - data[37] = 0x3; - data[38] = 0x4; - data[39] = 0x802000; - data[40] = 0x8020D4; - data[41] = 0x802264; - data[42] = 0x0; - data[43] = 0x802130; - data[44] = 0x802220; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0xC0; - data[52] = 0xA; - data[53] = 0x47435461; - data[54] = 0x736B4465; - data[55] = 0x73630000; - data[56] = 0x0; - data[57] = 0x7145256D; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80227C; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421FFC0; - data[1] = 0xBFC10038; - data[2] = 0x3BE10038; - data[3] = 0x3BC30000; - data[4] = 0xA8620002; - data[5] = 0x2C830000; - data[6] = 0x40860008; - data[7] = 0xB3C20002; - data[8] = 0x38800000; - data[9] = 0x98820000; - data[10] = 0x383FFFC8; - data[11] = 0xBBC10038; - data[12] = 0x38210040; - data[13] = 0x4E800020; - data[14] = 0x9421FFB8; - data[15] = 0x7C0802A6; - data[16] = 0x90010044; - data[17] = 0xBFC1003C; - data[18] = 0x3BE10038; - data[19] = 0x90410014; - data[20] = 0x3BC30000; - data[21] = 0x38600063; - data[22] = 0x4BFFFFA9; - data[23] = 0x383FFFC8; - data[24] = 0xBBC1003C; - data[25] = 0x80010044; - data[26] = 0x7C0803A6; - data[27] = 0x38210048; - data[28] = 0x4E800020; - data[29] = 0x9421FFB8; - data[30] = 0xBFA1003C; - data[31] = 0x3BE10038; - data[32] = 0x3BC30000; - data[33] = 0x3BA40000; - data[34] = 0xE9E0000; - data[35] = 0xE9D0000; - data[36] = 0x80BE0018; - data[37] = 0x80DD0018; - data[38] = 0x7F053000; - data[39] = 0x41980034; - data[40] = 0xE9E0000; - data[41] = 0xE9D0000; - data[42] = 0x80FE0018; - data[43] = 0x811D0018; - data[44] = 0x7F874000; - data[45] = 0x409E0024; - data[46] = 0xE9E0000; - data[47] = 0xE9D0000; - data[48] = 0xA93E0020; - data[49] = 0xA95D0020; - data[50] = 0x7C895000; - data[51] = 0x4084000C; - data[52] = 0x38600001; - data[53] = 0x42800008; - data[54] = 0x38600000; - data[55] = 0x42800008; - data[56] = 0x7FE00008; - data[57] = 0x383FFFC8; - data[58] = 0xBBA1003C; - data[59] = 0x38210048; - data[60] = 0x4E800020; - data[61] = 0x9421FFC0; - data[62] = 0xBFC10038; - data[63] = 0x3BE10038; - data[64] = 0x3BC30000; - data[65] = 0xE9E0000; - data[66] = 0x817E0000; - data[67] = 0x2F0B0000; - data[68] = 0x4198004C; - data[69] = 0xE9E0000; - data[70] = 0x819E0000; - data[71] = 0x3C608000; - data[72] = 0x3883FC17; - data[73] = 0x7F8C2000; - data[74] = 0x419D0034; - data[75] = 0xE9E0000; - data[76] = 0x80BE0004; - data[77] = 0x2C850000; - data[78] = 0x41840024; - data[79] = 0xE9E0000; - data[80] = 0x80DE0004; - data[81] = 0x3CE08000; - data[82] = 0x3907FC17; - data[83] = 0x7F064000; - data[84] = 0x4199000C; - data[85] = 0x38600001; - data[86] = 0x42800008; - data[87] = 0x38600000; - data[88] = 0x42800008; - data[89] = 0x7FE00008; - data[90] = 0x383FFFC8; - data[91] = 0xBBC10038; - data[92] = 0x38210040; - data[93] = 0x4E800020; - data[94] = 0x9421FFB8; - data[95] = 0x7C0802A6; - data[96] = 0x90010044; - data[97] = 0xBFC1003C; - data[98] = 0x3BE10038; - data[99] = 0x90410014; - data[100] = 0x3BC30000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x38600062; - data[1] = 0x4BFFFE69; - data[2] = 0x383FFFC8; - data[3] = 0xBBC1003C; - data[4] = 0x80010044; - data[5] = 0x7C0803A6; - data[6] = 0x38210048; - data[7] = 0x4E800020; - data[8] = 0x9421FFB0; - data[9] = 0x7C0802A6; - data[10] = 0x9001004C; - data[11] = 0xBFA10040; - data[12] = 0x3BE10038; - data[13] = 0x90410014; - data[14] = 0x3BC30000; - data[15] = 0x89220000; - data[16] = 0x2F890000; - data[17] = 0x419E0020; - data[18] = 0xA9420004; - data[19] = 0xA9620006; - data[20] = 0x7D8A5A14; - data[21] = 0x2C8C0020; - data[22] = 0x4084000C; - data[23] = 0x38600001; - data[24] = 0x42800008; - data[25] = 0x38600000; - data[26] = 0x98620000; - data[27] = 0x88820000; - data[28] = 0x2F040000; - data[29] = 0x419A0088; - data[30] = 0xA8A20004; - data[31] = 0x30C50001; - data[32] = 0xB0C20004; - data[33] = 0xABA20004; - data[34] = 0x387E0000; - data[35] = 0x7FA70E70; - data[36] = 0xCA70022; - data[37] = 0x54E8103A; - data[38] = 0x7D224214; - data[39] = 0x80890018; - data[40] = 0x8143FFFC; - data[41] = 0x800AFFE0; - data[42] = 0x7C0903A6; - data[43] = 0x804AFFE4; - data[44] = 0x4E800421; - data[45] = 0x80410014; - data[46] = 0x2F830000; - data[47] = 0x419E0030; - data[48] = 0xCBD0022; - data[49] = 0x57AB103A; - data[50] = 0x7D825A14; - data[51] = 0x7FA30E70; - data[52] = 0xCA30022; - data[53] = 0x5464103A; - data[54] = 0x7CA22214; - data[55] = 0x80C50018; - data[56] = 0x90CC0018; - data[57] = 0x7FBD0E70; - data[58] = 0x4280FFA0; - data[59] = 0xCBD0022; - data[60] = 0x57A7103A; - data[61] = 0x7D023A14; - data[62] = 0x93C80018; - data[63] = 0x383FFFC8; - data[64] = 0xBBA10040; - data[65] = 0x8001004C; - data[66] = 0x7C0803A6; - data[67] = 0x38210050; - data[68] = 0x4E800020; - data[69] = 0x9421FFA8; - data[70] = 0x7C0802A6; - data[71] = 0x90010054; - data[72] = 0xBF810044; - data[73] = 0x3BE10038; - data[74] = 0x90410014; - data[75] = 0x3BC00000; - data[76] = 0xA9220004; - data[77] = 0x2C890001; - data[78] = 0x40850118; - data[79] = 0xA9420004; - data[80] = 0xCAA0022; - data[81] = 0x554B103A; - data[82] = 0x7D825A14; - data[83] = 0x83CC0018; - data[84] = 0xA8620004; - data[85] = 0xCA30022; - data[86] = 0x5464103A; - data[87] = 0x7CA22214; - data[88] = 0x80C2000C; - data[89] = 0x90C50018; - data[90] = 0x3BA00001; - data[91] = 0xA8E20004; - data[92] = 0x3107FFFF; - data[93] = 0xB1020004; - data[94] = 0x57BC083C; - data[95] = 0xA9220004; - data[96] = 0x7F1C4800; - data[97] = 0x40990008; - data[98] = 0x428000B4; - data[99] = 0xCBC0022; - data[100] = 0x578A103A; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x7D625214; - data[1] = 0x806B0018; - data[2] = 0x319C0001; - data[3] = 0xCAC0022; - data[4] = 0x5584103A; - data[5] = 0x7CA22214; - data[6] = 0x80850018; - data[7] = 0x80C3FFFC; - data[8] = 0x8006FFE0; - data[9] = 0x7C0903A6; - data[10] = 0x8046FFE4; - data[11] = 0x4E800421; - data[12] = 0x80410014; - data[13] = 0x20E30001; - data[14] = 0x2F870000; - data[15] = 0x419E0008; - data[16] = 0x339C0001; - data[17] = 0x387E0000; - data[18] = 0xCBC0022; - data[19] = 0x5788103A; - data[20] = 0x7D224214; - data[21] = 0x80890018; - data[22] = 0x8143FFFC; - data[23] = 0x800AFFE0; - data[24] = 0x7C0903A6; - data[25] = 0x804AFFE4; - data[26] = 0x4E800421; - data[27] = 0x80410014; - data[28] = 0x2C830000; - data[29] = 0x4186000C; - data[30] = 0x42800030; - data[31] = 0x42800028; - data[32] = 0xCBD0022; - data[33] = 0x57AB103A; - data[34] = 0x7D825A14; - data[35] = 0xCBC0022; - data[36] = 0x5783103A; - data[37] = 0x7C821A14; - data[38] = 0x80A40018; - data[39] = 0x90AC0018; - data[40] = 0x3BBC0000; - data[41] = 0x4280FF40; - data[42] = 0xCBD0022; - data[43] = 0x57A6103A; - data[44] = 0x7CE23214; - data[45] = 0x93C70018; - data[46] = 0x42800020; - data[47] = 0xA9020004; - data[48] = 0x2F080001; - data[49] = 0x409A0014; - data[50] = 0x8122000C; - data[51] = 0x9122001C; - data[52] = 0x39400000; - data[53] = 0xB1420004; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80267C; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x383FFFC8; - data[1] = 0xBB810044; - data[2] = 0x80010054; - data[3] = 0x7C0803A6; - data[4] = 0x38210058; - data[5] = 0x4E800020; - data[6] = 0x9421FFA8; - data[7] = 0x7C0802A6; - data[8] = 0x90010054; - data[9] = 0xBF810044; - data[10] = 0x3BE10038; - data[11] = 0x90410014; - data[12] = 0x3BC00000; - data[13] = 0xA9620004; - data[14] = 0x2F8B0001; - data[15] = 0x409D00E0; - data[16] = 0x83C2001C; - data[17] = 0x3BA00001; - data[18] = 0x57BC083C; - data[19] = 0xA9820004; - data[20] = 0x7C9C6000; - data[21] = 0x40850008; - data[22] = 0x428000B4; - data[23] = 0xCBC0022; - data[24] = 0x5783103A; - data[25] = 0x7C821A14; - data[26] = 0x80640018; - data[27] = 0x30BC0001; - data[28] = 0xCA50022; - data[29] = 0x54A6103A; - data[30] = 0x7CE23214; - data[31] = 0x80870018; - data[32] = 0x8103FFFC; - data[33] = 0x8008FFE0; - data[34] = 0x7C0903A6; - data[35] = 0x8048FFE4; - data[36] = 0x4E800421; - data[37] = 0x80410014; - data[38] = 0x21230001; - data[39] = 0x2F090000; - data[40] = 0x419A0008; - data[41] = 0x339C0001; - data[42] = 0x387E0000; - data[43] = 0xCBC0022; - data[44] = 0x578A103A; - data[45] = 0x7D625214; - data[46] = 0x808B0018; - data[47] = 0x8183FFFC; - data[48] = 0x800CFFE0; - data[49] = 0x7C0903A6; - data[50] = 0x804CFFE4; - data[51] = 0x4E800421; - data[52] = 0x80410014; - data[53] = 0x2F830000; - data[54] = 0x419E000C; - data[55] = 0x42800030; - data[56] = 0x42800028; - data[57] = 0xCBD0022; - data[58] = 0x57A3103A; - data[59] = 0x7C821A14; - data[60] = 0xCBC0022; - data[61] = 0x5785103A; - data[62] = 0x7CC22A14; - data[63] = 0x80E60018; - data[64] = 0x90E40018; - data[65] = 0x3BBC0000; - data[66] = 0x4280FF40; - data[67] = 0xCBD0022; - data[68] = 0x57A8103A; - data[69] = 0x7D224214; - data[70] = 0x93C90018; - data[71] = 0x383FFFC8; - data[72] = 0xBB810044; - data[73] = 0x80010054; - data[74] = 0x7C0803A6; - data[75] = 0x38210058; - data[76] = 0x4E800020; - data[77] = 0x9421FF98; - data[78] = 0x7C0802A6; - data[79] = 0x90010064; - data[80] = 0xBF41004C; - data[81] = 0x3BE10038; - data[82] = 0x90410014; - data[83] = 0x3BC30000; - data[84] = 0x3BA00000; - data[85] = 0xAB420004; - data[86] = 0x2C9A0000; - data[87] = 0x40850024; - data[88] = 0xCBA0022; - data[89] = 0x574A103A; - data[90] = 0x7D625214; - data[91] = 0x818B0018; - data[92] = 0x7F0CF000; - data[93] = 0x419A000C; - data[94] = 0x335AFFFF; - data[95] = 0x4280FFDC; - data[96] = 0x2F9A0000; - data[97] = 0x409D01B4; - data[98] = 0x2C9A0001; - data[99] = 0x4086000C; - data[100] = 0x4BFFFD19; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x428001A4; - data[1] = 0xA8620004; - data[2] = 0xCA30022; - data[3] = 0x5464103A; - data[4] = 0x7CA22214; - data[5] = 0x83A50018; - data[6] = 0xA8C20004; - data[7] = 0xCA60022; - data[8] = 0x54C7103A; - data[9] = 0x7D023A14; - data[10] = 0x8122000C; - data[11] = 0x91280018; - data[12] = 0xA9420004; - data[13] = 0x7F1A5000; - data[14] = 0x409A0014; - data[15] = 0xA9620004; - data[16] = 0x318BFFFF; - data[17] = 0xB1820004; - data[18] = 0x4280015C; - data[19] = 0x2F9A0001; - data[20] = 0x409D0154; - data[21] = 0xA8620004; - data[22] = 0x3083FFFF; - data[23] = 0xB0820004; - data[24] = 0x3B9A0000; - data[25] = 0x387D0000; - data[26] = 0x7F850E70; - data[27] = 0xCA50022; - data[28] = 0x54A6103A; - data[29] = 0x7CE23214; - data[30] = 0x80870018; - data[31] = 0x8103FFFC; - data[32] = 0x8008FFE0; - data[33] = 0x7C0903A6; - data[34] = 0x8048FFE4; - data[35] = 0x4E800421; - data[36] = 0x80410014; - data[37] = 0x2C830000; - data[38] = 0x41860030; - data[39] = 0xCBC0022; - data[40] = 0x5789103A; - data[41] = 0x7D424A14; - data[42] = 0x7F8B0E70; - data[43] = 0xCAB0022; - data[44] = 0x556C103A; - data[45] = 0x7C626214; - data[46] = 0x80830018; - data[47] = 0x908A0018; - data[48] = 0x7F9C0E70; - data[49] = 0x4280FFA0; - data[50] = 0x7F1CD000; - data[51] = 0x409A00C8; - data[52] = 0x579B083C; - data[53] = 0xA8A20004; - data[54] = 0x7F9B2800; - data[55] = 0x409D0008; - data[56] = 0x428000B4; - data[57] = 0xCBB0022; - data[58] = 0x5766103A; - data[59] = 0x7CE23214; - data[60] = 0x80670018; - data[61] = 0x311B0001; - data[62] = 0xCA80022; - data[63] = 0x5509103A; - data[64] = 0x7D424A14; - data[65] = 0x808A0018; - data[66] = 0x8163FFFC; - data[67] = 0x800BFFE0; - data[68] = 0x7C0903A6; - data[69] = 0x804BFFE4; - data[70] = 0x4E800421; - data[71] = 0x80410014; - data[72] = 0x21830001; - data[73] = 0x2C8C0000; - data[74] = 0x41860008; - data[75] = 0x337B0001; - data[76] = 0x387D0000; - data[77] = 0xCBB0022; - data[78] = 0x5764103A; - data[79] = 0x7CA22214; - data[80] = 0x80850018; - data[81] = 0x80C3FFFC; - data[82] = 0x8006FFE0; - data[83] = 0x7C0903A6; - data[84] = 0x8046FFE4; - data[85] = 0x4E800421; - data[86] = 0x80410014; - data[87] = 0x2F030000; - data[88] = 0x419A000C; - data[89] = 0x42800030; - data[90] = 0x42800028; - data[91] = 0xCBC0022; - data[92] = 0x5787103A; - data[93] = 0x7D023A14; - data[94] = 0xCBB0022; - data[95] = 0x5769103A; - data[96] = 0x7D424A14; - data[97] = 0x816A0018; - data[98] = 0x91680018; - data[99] = 0x3B9B0000; - data[100] = 0x4280FF40; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0xCBC0022; - data[1] = 0x578C103A; - data[2] = 0x7C626214; - data[3] = 0x93A30018; - data[4] = 0x383FFFC8; - data[5] = 0xBB41004C; - data[6] = 0x80010064; - data[7] = 0x7C0803A6; - data[8] = 0x38210068; - data[9] = 0x4E800020; - data[10] = 0x9421FFB0; - data[11] = 0x7C0802A6; - data[12] = 0x9001004C; - data[13] = 0xBFA10040; - data[14] = 0x3BE10038; - data[15] = 0x90410014; - data[16] = 0x3BC30000; - data[17] = 0xA8820006; - data[18] = 0x23A40022; - data[19] = 0x2F9D0022; - data[20] = 0x409C0024; - data[21] = 0xCBD0022; - data[22] = 0x57A5103A; - data[23] = 0x7CC22A14; - data[24] = 0x80E60018; - data[25] = 0x7C87F000; - data[26] = 0x4186000C; - data[27] = 0x33BD0001; - data[28] = 0x4280FFDC; - data[29] = 0x2F1D0022; - data[30] = 0x4098003C; - data[31] = 0xCBD0022; - data[32] = 0x57A8103A; - data[33] = 0x7D224214; - data[34] = 0xA9420006; - data[35] = 0x216A0022; - data[36] = 0xCAB0022; - data[37] = 0x556C103A; - data[38] = 0x7C626214; - data[39] = 0x80830018; - data[40] = 0x90890018; - data[41] = 0xA8A20006; - data[42] = 0x30C5FFFF; - data[43] = 0xB0C20006; - data[44] = 0x4280000C; - data[45] = 0x387E0000; - data[46] = 0x4BFFFD55; - data[47] = 0xE9E0000; - data[48] = 0x38E00000; - data[49] = 0x98FE0017; - data[50] = 0x383FFFC8; - data[51] = 0xBBA10040; - data[52] = 0x8001004C; - data[53] = 0x7C0803A6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802A7C; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x38210050; - data[1] = 0x4E800020; - data[2] = 0x9421FFC0; - data[3] = 0x7C0802A6; - data[4] = 0x9001003C; - data[5] = 0xBFE10038; - data[6] = 0x3BE10038; - data[7] = 0x90410014; - data[8] = 0x8042FFEC; - data[9] = 0x4BBF71D5; - data[10] = 0x80410014; - data[11] = 0x42800008; - data[12] = 0x7FE00008; - data[13] = 0x383FFFC8; - data[14] = 0xBBE10038; - data[15] = 0x8001003C; - data[16] = 0x7C0803A6; - data[17] = 0x38210040; - data[18] = 0x4E800020; - data[19] = 0x9421FFA0; - data[20] = 0x7C0802A6; - data[21] = 0x9001005C; - data[22] = 0xBF610048; - data[23] = 0x3BE10038; - data[24] = 0x90410014; - data[25] = 0x3BC00000; - data[26] = 0x8102FFEC; - data[27] = 0x81280008; - data[28] = 0x912200A0; - data[29] = 0x8148000C; - data[30] = 0x914200A4; - data[31] = 0x816200A0; - data[32] = 0x2F8B0000; - data[33] = 0x419E0028; - data[34] = 0x8182FFEC; - data[35] = 0x38600000; - data[36] = 0x906C0008; - data[37] = 0x906C000C; - data[38] = 0x800200A0; - data[39] = 0x7C0903A6; - data[40] = 0x804200A4; - data[41] = 0x4E800421; - data[42] = 0x80410014; - data[43] = 0x80620014; - data[44] = 0xE830000; - data[45] = 0x38630018; - data[46] = 0x80820014; - data[47] = 0xE840000; - data[48] = 0x38840020; - data[49] = 0x8042FFEC; - data[50] = 0x4BBF7171; - data[51] = 0x80410014; - data[52] = 0x83C2001C; - data[53] = 0x387E0000; - data[54] = 0x80820014; - data[55] = 0x80A3FFFC; - data[56] = 0x8005FFE0; - data[57] = 0x7C0903A6; - data[58] = 0x8045FFE4; - data[59] = 0x4E800421; - data[60] = 0x80410014; - data[61] = 0x2C830000; - data[62] = 0x41860214; - data[63] = 0x38C00001; - data[64] = 0xB0C2000A; - data[65] = 0xE9E0000; - data[66] = 0x80FE0008; - data[67] = 0x31070001; - data[68] = 0x911E0008; - data[69] = 0xE9E0000; - data[70] = 0x893E0015; - data[71] = 0x2F090000; - data[72] = 0x419A006C; - data[73] = 0x4BFFFEE5; - data[74] = 0x3BA30000; - data[75] = 0x387E0000; - data[76] = 0x8143FFFC; - data[77] = 0x800AFFF0; - data[78] = 0x7C0903A6; - data[79] = 0x804AFFF4; - data[80] = 0x4E800421; - data[81] = 0x80410014; - data[82] = 0x4BFFFEC1; - data[83] = 0x3B830000; - data[84] = 0x7F7DE010; - data[85] = 0xE9E0000; - data[86] = 0x817E000C; - data[87] = 0x7F9B5800; - data[88] = 0x409C0010; - data[89] = 0xE9E0000; - data[90] = 0x937E000C; - data[91] = 0x4280001C; - data[92] = 0xE9E0000; - data[93] = 0x819E0010; - data[94] = 0x7C9B6000; - data[95] = 0x4085000C; - data[96] = 0xE9E0000; - data[97] = 0x937E0010; - data[98] = 0x42800020; - data[99] = 0x387E0000; - data[100] = 0x8083FFFC; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x8004FFF0; - data[1] = 0x7C0903A6; - data[2] = 0x8044FFF4; - data[3] = 0x4E800421; - data[4] = 0x80410014; - data[5] = 0xE9E0000; - data[6] = 0x88BE0017; - data[7] = 0x2F050000; - data[8] = 0x419A0154; - data[9] = 0xE9E0000; - data[10] = 0x80DE0004; - data[11] = 0x2F860000; - data[12] = 0x419D0034; - data[13] = 0xA8E20006; - data[14] = 0x31070001; - data[15] = 0xB1020006; - data[16] = 0xA9220006; - data[17] = 0x21490022; - data[18] = 0xCAA0022; - data[19] = 0x554B103A; - data[20] = 0x7D825A14; - data[21] = 0x8062001C; - data[22] = 0x906C0018; - data[23] = 0x4BFFF8B9; - data[24] = 0x42800114; - data[25] = 0xE9E0000; - data[26] = 0xE9E0000; - data[27] = 0xA89E0020; - data[28] = 0xA8BE0022; - data[29] = 0x7CC42A14; - data[30] = 0xB0DE0020; - data[31] = 0xE9E0000; - data[32] = 0xA8FE0020; - data[33] = 0x2C8703E8; - data[34] = 0x41840024; - data[35] = 0xE9E0000; - data[36] = 0xA91E0020; - data[37] = 0x3128FC18; - data[38] = 0xB13E0020; - data[39] = 0xE9E0000; - data[40] = 0x815E0018; - data[41] = 0x316A0001; - data[42] = 0x917E0018; - data[43] = 0xE9E0000; - data[44] = 0xE9E0000; - data[45] = 0x819E0018; - data[46] = 0x807E001C; - data[47] = 0x7C8C1A14; - data[48] = 0x909E0018; - data[49] = 0xE9E0000; - data[50] = 0x88BE0016; - data[51] = 0x2F050000; - data[52] = 0x419A00A0; - data[53] = 0x387E0000; - data[54] = 0x80820014; - data[55] = 0x80C3FFFC; - data[56] = 0x8006FFE0; - data[57] = 0x7C0903A6; - data[58] = 0x8046FFE4; - data[59] = 0x4E800421; - data[60] = 0x80410014; - data[61] = 0x2F830000; - data[62] = 0x419E0078; - data[63] = 0xE9E0000; - data[64] = 0x80E20014; - data[65] = 0xE870000; - data[66] = 0xE9E0000; - data[67] = 0xA9070020; - data[68] = 0xA93E0022; - data[69] = 0x7D484A14; - data[70] = 0xB15E0020; - data[71] = 0xE9E0000; - data[72] = 0xA97E0020; - data[73] = 0x2C8B03E8; - data[74] = 0x41840028; - data[75] = 0xE9E0000; - data[76] = 0xA99E0020; - data[77] = 0x306CFC18; - data[78] = 0xB07E0020; - data[79] = 0x80820014; - data[80] = 0xE840000; - data[81] = 0x80A40018; - data[82] = 0x30C50001; - data[83] = 0x90C40018; - data[84] = 0xE9E0000; - data[85] = 0x80E20014; - data[86] = 0xE870000; - data[87] = 0xE9E0000; - data[88] = 0x81070018; - data[89] = 0x813E001C; - data[90] = 0x7D484A14; - data[91] = 0x915E0018; - data[92] = 0x4BFFF915; - data[93] = 0x428000F4; - data[94] = 0xA9620006; - data[95] = 0x2F0B0000; - data[96] = 0x409900E8; - data[97] = 0xA9820008; - data[98] = 0x306C0001; - data[99] = 0xB0620008; - data[100] = 0xA8820008; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 54; - data[0] = 0x2F840022; - data[1] = 0x419C0010; - data[2] = 0xA8A20006; - data[3] = 0x20C50022; - data[4] = 0xB0C20008; - data[5] = 0xA8E20008; - data[6] = 0xB0E2000A; - data[7] = 0xA9020008; - data[8] = 0xCA80022; - data[9] = 0x5509103A; - data[10] = 0x7D424A14; - data[11] = 0x83CA0018; - data[12] = 0xE9E0000; - data[13] = 0x817E0008; - data[14] = 0x318B0001; - data[15] = 0x919E0008; - data[16] = 0xE9E0000; - data[17] = 0x887E0015; - data[18] = 0x2C830000; - data[19] = 0x4186006C; - data[20] = 0x4BFFFC91; - data[21] = 0x3BA30000; - data[22] = 0x387E0000; - data[23] = 0x8083FFFC; - data[24] = 0x8004FFF0; - data[25] = 0x7C0903A6; - data[26] = 0x8044FFF4; - data[27] = 0x4E800421; - data[28] = 0x80410014; - data[29] = 0x4BFFFC6D; - data[30] = 0x3B830000; - data[31] = 0x7F7DE010; - data[32] = 0xE9E0000; - data[33] = 0x80BE000C; - data[34] = 0x7F1B2800; - data[35] = 0x40980010; - data[36] = 0xE9E0000; - data[37] = 0x937E000C; - data[38] = 0x4280001C; - data[39] = 0xE9E0000; - data[40] = 0x80DE0010; - data[41] = 0x7F9B3000; - data[42] = 0x409D000C; - data[43] = 0xE9E0000; - data[44] = 0x937E0010; - data[45] = 0x42800020; - data[46] = 0x387E0000; - data[47] = 0x80E3FFFC; - data[48] = 0x8007FFF0; - data[49] = 0x7C0903A6; - data[50] = 0x8047FFF4; - data[51] = 0x4E800421; - data[52] = 0x80410014; - data[53] = 0x4280FC6C; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802E7C; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x383FFFC8; - data[1] = 0xBB610048; - data[2] = 0x8001005C; - data[3] = 0x7C0803A6; - data[4] = 0x38210060; - data[5] = 0x4E800020; - data[6] = 0x9421FFC0; - data[7] = 0x7C0802A6; - data[8] = 0x9001003C; - data[9] = 0xBFE10038; - data[10] = 0x3BE10038; - data[11] = 0x90410014; - data[12] = 0x8042FFEC; - data[13] = 0x4BBF6DC5; - data[14] = 0x80410014; - data[15] = 0x390003E8; - data[16] = 0x7C6343D7; - data[17] = 0x40800008; - data[18] = 0x3063FFFF; - data[19] = 0x42800008; - data[20] = 0x7FE00008; - data[21] = 0x383FFFC8; - data[22] = 0xBBE10038; - data[23] = 0x8001003C; - data[24] = 0x7C0803A6; - data[25] = 0x38210040; - data[26] = 0x4E800020; - data[27] = 0x9421FFA8; - data[28] = 0x7C0802A6; - data[29] = 0x90010054; - data[30] = 0xBFA10048; - data[31] = 0x3BE10038; - data[32] = 0x90410014; - data[33] = 0x3BC30000; - data[34] = 0x387E0000; - data[35] = 0x4BFFFAC5; - data[36] = 0x387E0000; - data[37] = 0x8123FFFC; - data[38] = 0x8009FFE8; - data[39] = 0x7C0903A6; - data[40] = 0x8049FFEC; - data[41] = 0x4E800421; - data[42] = 0x80410014; - data[43] = 0x21430001; - data[44] = 0x2C8A0000; - data[45] = 0x41860010; - data[46] = 0x38600001; - data[47] = 0x4BFFF345; - data[48] = 0x42800154; - data[49] = 0xA9620004; - data[50] = 0xA9820006; - data[51] = 0x7C6B6214; - data[52] = 0x2F030020; - data[53] = 0x41980010; - data[54] = 0x38600002; - data[55] = 0x4BFFF325; - data[56] = 0x42800134; - data[57] = 0x387F0000; - data[58] = 0x389F0008; - data[59] = 0x8042FFEC; - data[60] = 0x4BBF6D49; - data[61] = 0x80410014; - data[62] = 0xA89F0008; - data[63] = 0xE9E0000; - data[64] = 0x80BE0000; - data[65] = 0x7FA42A14; - data[66] = 0xE9E0000; - data[67] = 0x80DE0000; - data[68] = 0x2F860000; - data[69] = 0x419D0014; - data[70] = 0xE9E0000; - data[71] = 0x80FE0004; - data[72] = 0x2C870000; - data[73] = 0x408500C0; - data[74] = 0xE9E0000; - data[75] = 0x390003E8; - data[76] = 0x7D3D43D7; - data[77] = 0x40800008; - data[78] = 0x3129FFFF; - data[79] = 0x815F0000; - data[80] = 0x7D6A4A14; - data[81] = 0x917E0018; - data[82] = 0xE9E0000; - data[83] = 0x398003E8; - data[84] = 0x7C7D63D6; - data[85] = 0x7C6361D6; - data[86] = 0x7C63E811; - data[87] = 0x40800008; - data[88] = 0x306303E8; - data[89] = 0xB07E0020; - data[90] = 0xE9E0000; - data[91] = 0xE9E0000; - data[92] = 0x809E0004; - data[93] = 0x38A003E8; - data[94] = 0x7CC42BD7; - data[95] = 0x40800008; - data[96] = 0x30C6FFFF; - data[97] = 0x90DE001C; - data[98] = 0xE9E0000; - data[99] = 0xE9E0000; - data[100] = 0x80FE0004; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x390003E8; - data[1] = 0x7D2743D6; - data[2] = 0x7D2941D6; - data[3] = 0x7D293811; - data[4] = 0x40800008; - data[5] = 0x312903E8; - data[6] = 0xB13E0022; - data[7] = 0xE9E0000; - data[8] = 0x39400000; - data[9] = 0x915E0008; - data[10] = 0xE9E0000; - data[11] = 0x3D608000; - data[12] = 0x398BFFFF; - data[13] = 0x919E000C; - data[14] = 0xE9E0000; - data[15] = 0x38600000; - data[16] = 0x907E0010; - data[17] = 0x387E0000; - data[18] = 0x4BFFF3D9; - data[19] = 0x42800028; - data[20] = 0xA8820006; - data[21] = 0x30A40001; - data[22] = 0xB0A20006; - data[23] = 0xA8C20006; - data[24] = 0x20E60022; - data[25] = 0xCA70022; - data[26] = 0x54E8103A; - data[27] = 0x7D224214; - data[28] = 0x93C90018; - data[29] = 0xE9E0000; - data[30] = 0x39400001; - data[31] = 0x995E0017; - data[32] = 0x383FFFC8; - data[33] = 0xBBA10048; - data[34] = 0x80010054; - data[35] = 0x7C0803A6; - data[36] = 0x38210058; - data[37] = 0x4E800020; - data[38] = 0x9421FFB0; - data[39] = 0x7C0802A6; - data[40] = 0x9001004C; - data[41] = 0xBFC10044; - data[42] = 0x3BE10038; - data[43] = 0x90410014; - data[44] = 0x39600001; - data[45] = 0x99620000; - data[46] = 0x39800000; - data[47] = 0xB1820002; - data[48] = 0x38600000; - data[49] = 0x906200A0; - data[50] = 0x906200A4; - data[51] = 0x38800000; - data[52] = 0xB0820004; - data[53] = 0x38A00000; - data[54] = 0xB0A20006; - data[55] = 0x38C00022; - data[56] = 0xB0C20008; - data[57] = 0x8062FFF8; - data[58] = 0x8042FFE8; - data[59] = 0x4BBF73CD; - data[60] = 0x80410014; - data[61] = 0x9062000C; - data[62] = 0x80E2000C; - data[63] = 0xE870000; - data[64] = 0x3D008000; - data[65] = 0x3928FFFF; - data[66] = 0x91270018; - data[67] = 0x8142000C; - data[68] = 0xE8A0000; - data[69] = 0x39600000; - data[70] = 0xB16A0020; - data[71] = 0x8062FFF8; - data[72] = 0x8042FFE8; - data[73] = 0x4BBF7395; - data[74] = 0x80410014; - data[75] = 0x90620010; - data[76] = 0x81820010; - data[77] = 0xE8C0000; - data[78] = 0x3C608000; - data[79] = 0x906C0018; - data[80] = 0x80820010; - data[81] = 0xE840000; - data[82] = 0x38A00000; - data[83] = 0xB0A40020; - data[84] = 0x8062FFFC; - data[85] = 0x8042FFE8; - data[86] = 0x4BBF7361; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80C20010; - data[90] = 0x90C20018; - data[91] = 0x3BC00001; - data[92] = 0x2F1E0021; - data[93] = 0x41990020; - data[94] = 0xCBE0022; - data[95] = 0x57C7103A; - data[96] = 0x7D023A14; - data[97] = 0x8122000C; - data[98] = 0x91280018; - data[99] = 0x33DE0001; - data[100] = 0x4280FFE0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 40; - data[0] = 0x3D400080; - data[1] = 0x396A2AC8; - data[2] = 0x8182FFEC; - data[3] = 0x916C0010; - data[4] = 0x904C0014; - data[5] = 0x383FFFC8; - data[6] = 0xBBC10044; - data[7] = 0x8001004C; - data[8] = 0x7C0803A6; - data[9] = 0x38210050; - data[10] = 0x4E800020; - data[11] = 0x9421FFC0; - data[12] = 0xBFE1003C; - data[13] = 0x3BE10038; - data[14] = 0x383FFFC8; - data[15] = 0xBBE1003C; - data[16] = 0x38210040; - data[17] = 0x4E800020; - data[18] = 0x9421FFC0; - data[19] = 0xBFC10038; - data[20] = 0x3BE10038; - data[21] = 0x3BC30000; - data[22] = 0x383FFFC8; - data[23] = 0xBBC10038; - data[24] = 0x38210040; - data[25] = 0x4E800020; - data[26] = 0x9421FFC0; - data[27] = 0x7C0802A6; - data[28] = 0x9001003C; - data[29] = 0xBFE10038; - data[30] = 0x3BE10038; - data[31] = 0x90410014; - data[32] = 0x4BFFFE85; - data[33] = 0x383FFFC8; - data[34] = 0xBBE10038; - data[35] = 0x8001003C; - data[36] = 0x7C0803A6; - data[37] = 0x38210040; - data[38] = 0x4E800020; - data[39] = 0x73C16892; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80330C; - bdi.startFastDownload(baseAddr); - length = 27; - data[0] = 0x0; - data[1] = 0x803348; - data[2] = 0x0; - data[3] = 0x80336C; - data[4] = 0x8; - data[5] = 0x8034A0; - data[6] = 0x0; - data[7] = 0x80330C; - data[8] = 0x6C; - data[9] = 0x803378; - data[10] = 0x15C; - data[11] = 0x8034D4; - data[12] = 0x8; - data[13] = 0x8034DC; - data[14] = 0x0; - data[15] = 0x9; - data[16] = 0x4472764D; - data[17] = 0x70696F73; - data[18] = 0x6D000000; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x3FA6E0; - data[26] = 0x8451FDF2; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x803378; - bdi.startFastDownload(baseAddr); - length = 87; - data[0] = 0x9421FFB0; - data[1] = 0x7C000026; - data[2] = 0x9001004C; - data[3] = 0xBFA10040; - data[4] = 0x3BE10038; - data[5] = 0x3BC30000; - data[6] = 0x2C840000; - data[7] = 0x4E663042; - data[8] = 0x3C600030; - data[9] = 0x38836102; - data[10] = 0xA3A40000; - data[11] = 0x40930014; - data[12] = 0x38A00001; - data[13] = 0x7CA5F030; - data[14] = 0x7FBD2B78; - data[15] = 0x42800010; - data[16] = 0x38C00001; - data[17] = 0x7CC6F030; - data[18] = 0x7FBD3078; - data[19] = 0x3CE00030; - data[20] = 0x39076102; - data[21] = 0xB3A80000; - data[22] = 0x383FFFC8; - data[23] = 0xBBA10040; - data[24] = 0x8001004C; - data[25] = 0x7C0FF120; - data[26] = 0x38210050; - data[27] = 0x4E800020; - data[28] = 0x9421FFB0; - data[29] = 0x7C000026; - data[30] = 0x9001004C; - data[31] = 0xBFA10040; - data[32] = 0x3BE10038; - data[33] = 0x3BC30000; - data[34] = 0x2F040000; - data[35] = 0x4E7AD042; - data[36] = 0x3D200030; - data[37] = 0x39496100; - data[38] = 0xA3AA0000; - data[39] = 0x40930014; - data[40] = 0x39600001; - data[41] = 0x7D6BF030; - data[42] = 0x7FBD5B78; - data[43] = 0x42800010; - data[44] = 0x39800001; - data[45] = 0x7D8CF030; - data[46] = 0x7FBD6078; - data[47] = 0x3C600030; - data[48] = 0x38836100; - data[49] = 0xB3A40000; - data[50] = 0x383FFFC8; - data[51] = 0xBBA10040; - data[52] = 0x8001004C; - data[53] = 0x7C0FF120; - data[54] = 0x38210050; - data[55] = 0x4E800020; - data[56] = 0x9421FFB0; - data[57] = 0xBFA10044; - data[58] = 0x3BE10038; - data[59] = 0x3BC30000; - data[60] = 0x3CA00030; - data[61] = 0x38C56100; - data[62] = 0xA3A60000; - data[63] = 0x7FC7F0F8; - data[64] = 0x5FA73801; - data[65] = 0x4F821042; - data[66] = 0x7D000026; - data[67] = 0x5503EFFE; - data[68] = 0x42800008; - data[69] = 0x7FE00008; - data[70] = 0x383FFFC8; - data[71] = 0xBBA10044; - data[72] = 0x38210050; - data[73] = 0x4E800020; - data[74] = 0x9421FFC0; - data[75] = 0x7C0802A6; - data[76] = 0x9001003C; - data[77] = 0xBFE10038; - data[78] = 0x3BE10038; - data[79] = 0x90410014; - data[80] = 0x383FFFC8; - data[81] = 0xBBE10038; - data[82] = 0x8001003C; - data[83] = 0x7C0803A6; - data[84] = 0x38210040; - data[85] = 0x4E800020; - data[86] = 0x84BDA90A; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x8034DC; - bdi.startFastDownload(baseAddr); - length = 60; - data[0] = 0x1; - data[1] = 0x803728; - data[2] = 0x80351C; - data[3] = 0x803570; - data[4] = 0x803540; - data[5] = 0x10; - data[6] = 0x803680; - data[7] = 0x0; - data[8] = 0x8034DC; - data[9] = 0xF0; - data[10] = 0x8035CC; - data[11] = 0x14C; - data[12] = 0x803718; - data[13] = 0x10; - data[14] = 0x803728; - data[15] = 0x8; - data[16] = 0xF; - data[17] = 0x44727674; - data[18] = 0x6573744C; - data[19] = 0x6564426C; - data[20] = 0x696E6B00; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x3FA720; - data[26] = 0x80325C; - data[27] = 0x8034DC; - data[28] = 0x803570; - data[29] = 0x8022F0; - data[30] = 0x80325C; - data[31] = 0x802370; - data[32] = 0x80325C; - data[33] = 0x8035CC; - data[34] = 0x803728; - data[35] = 0x1; - data[36] = 0xC; - data[37] = 0x24; - data[38] = 0x1; - data[39] = 0x3; - data[40] = 0xC; - data[41] = 0x8034DC; - data[42] = 0x80351C; - data[43] = 0x8035B4; - data[44] = 0x0; - data[45] = 0x802130; - data[46] = 0x803570; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0xC0; - data[54] = 0xB; - data[55] = 0x3F5E426C; - data[56] = 0x696E6B54; - data[57] = 0x61736B00; - data[58] = 0x0; - data[59] = 0x86212A8C; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x8035CC; - bdi.startFastDownload(baseAddr); - length = 83; - data[0] = 0x9421FFB0; - data[1] = 0x7C0802A6; - data[2] = 0x9001004C; - data[3] = 0xBFA10040; - data[4] = 0x3BE10038; - data[5] = 0x90410014; - data[6] = 0x3BC30000; - data[7] = 0x88620004; - data[8] = 0x2C830000; - data[9] = 0x4186001C; - data[10] = 0x3860000F; - data[11] = 0x38800001; - data[12] = 0x8042FFF8; - data[13] = 0x4BFFFDE9; - data[14] = 0x80410014; - data[15] = 0x42800018; - data[16] = 0x3860000F; - data[17] = 0x38800000; - data[18] = 0x8042FFF8; - data[19] = 0x4BFFFDD1; - data[20] = 0x80410014; - data[21] = 0x88820004; - data[22] = 0x20A40001; - data[23] = 0x98A20004; - data[24] = 0x383FFFC8; - data[25] = 0xBBA10040; - data[26] = 0x8001004C; - data[27] = 0x7C0803A6; - data[28] = 0x38210050; - data[29] = 0x4E800020; - data[30] = 0x9421FFB8; - data[31] = 0xBFC10040; - data[32] = 0x3BE10038; - data[33] = 0x3BC00000; - data[34] = 0x2F1E004C; - data[35] = 0x41990018; - data[36] = 0x30DE0100; - data[37] = 0x3CE00080; - data[38] = 0x7CC7F12E; - data[39] = 0x33DE0004; - data[40] = 0x4280FFE8; - data[41] = 0x383FFFC8; - data[42] = 0xBBC10040; - data[43] = 0x38210048; - data[44] = 0x4E800020; - data[45] = 0x9421FFC0; - data[46] = 0x7C0802A6; - data[47] = 0x9001003C; - data[48] = 0xBFE10038; - data[49] = 0x3BE10038; - data[50] = 0x90410014; - data[51] = 0x8062FFFC; - data[52] = 0x8042FFF0; - data[53] = 0x4BBF6E29; - data[54] = 0x80410014; - data[55] = 0x90620000; - data[56] = 0x81020000; - data[57] = 0xE880000; - data[58] = 0x392001F4; - data[59] = 0x91280004; - data[60] = 0x80620000; - data[61] = 0x8042FFF4; - data[62] = 0x4BFFF825; - data[63] = 0x80410014; - data[64] = 0x3860000F; - data[65] = 0x38800001; - data[66] = 0x8042FFF8; - data[67] = 0x4BFFFCA1; - data[68] = 0x80410014; - data[69] = 0x3860000F; - data[70] = 0x38800001; - data[71] = 0x8042FFF8; - data[72] = 0x4BFFFCFD; - data[73] = 0x80410014; - data[74] = 0x39400000; - data[75] = 0x99420004; - data[76] = 0x383FFFC8; - data[77] = 0xBBE10038; - data[78] = 0x8001003C; - data[79] = 0x7C0803A6; - data[80] = 0x38210040; - data[81] = 0x4E800020; - data[82] = 0x87111E2A; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - } - - public static void doFill2() throws BDIException, USBException, - DispatchException { - index = 0; - - bdi.writeMem(0x2FC100, 0x01000003, 4); - bdi.writeMem(0x2FC104, 0x0FFC00020, 4); - bdi.writeMem(0x2FC108, 0x0800003, 4); - bdi.writeMem(0x2FC10C, 0x0FFE00020, 4); - bdi.writeMem(0x2FC140, 3, 4); - bdi.writeMem(0x2FC144, 0x7E000000, 4); - bdi.writeSPR(158, 0x07); - bdi.writeMem(0x2FC288, -1, 4); - bdi.writeSPR(149, 0x031C7400F); - bdi.writeSPR(27, 0x03802); - - int length; - int[] data = new int[bdi.getMaxNofWordsFastDownload()]; - - baseAddr = 0x3f9800; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0xa8; - data[5] = 0x80; - data[6] = 0x38; - data[7] = 0x54; - data[8] = 0x68; - data[9] = 0x74; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x3; - data[15] = 0x0; - data[16] = 0x2000; - data[17] = 0x3f9800; - data[18] = 0x6800; - data[19] = 0x800000; - data[20] = 0x200000; - data[21] = 0x2; - data[22] = 0x2000; - data[23] = 0x3e000; - data[24] = 0x40000; - data[25] = 0x30000; - data[26] = 0x1; - data[27] = 0x3ff800; - data[28] = 0x800; - data[29] = 0x1; - data[30] = 0x803730; - data[31] = 0x1fc8cc; - data[32] = 0x30; - data[33] = 0x6; - data[34] = 0x3f98a8; - data[35] = 0x3f9914; - data[36] = 0x3f9acc; - data[37] = 0x802000; - data[38] = 0x80330c; - data[39] = 0x8034dc; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x22d4cc; - data[45] = 0x618a7525; - data[46] = 0x10e09e0; - data[47] = 0x10bbbfc; - data[48] = 0x10bbc04; - data[49] = 0x10bbc08; - data[50] = 0x10e09e0; - data[51] = 0x22d4f0; - data[52] = 0x618a7620; - data[53] = 0x10bbbe0; - data[54] = 0x0; - data[55] = 0x22d4ec; - data[56] = 0x618a6660; - data[57] = 0x0; - data[58] = 0x10e0a20; - data[59] = 0x10e09e0; - data[60] = 0x22d4fc; - data[61] = 0x618f1be6; - data[62] = 0x10bbbe0; - data[63] = 0x22d51c; - data[64] = 0x618f2ed4; - data[65] = 0x10bbc20; - data[66] = 0x10bbbe0; - data[67] = 0x2; - data[68] = 0x22d608; - data[69] = 0x618f4939; - data[70] = 0x4d; - data[71] = 0x2de; - data[72] = 0x22d62c; - data[73] = 0x618e01a4; - data[74] = 0xb000d; - data[75] = 0x1; - data[76] = 0x0; - data[77] = 0xffffffff; - data[78] = 0x1; - data[79] = 0x5fbb08; - data[80] = 0x2c2; - data[81] = 0x5fbb08; - data[82] = 0x22d568; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x10e25e0; - data[86] = 0x0; - data[87] = 0x22d588; - data[88] = 0x618f2f10; - data[89] = 0x10be680; - data[90] = 0x22d588; - data[91] = 0x618f2fe6; - data[92] = 0x10bbc20; - data[93] = 0xdbbe0; - data[94] = 0x3f; - data[95] = 0x22d674; - data[96] = 0x618f4939; - data[97] = 0x1; - data[98] = 0x1; - data[99] = 0x1; - data[100] = 0x10be340; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3f98a8; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x3f98e4; - data[2] = 0x0; - data[3] = 0x3f9908; - data[4] = 0x8; - data[5] = 0x3fa1f0; - data[6] = 0x0; - data[7] = 0x3f98a8; - data[8] = 0x6c; - data[9] = 0x3f9bf0; - data[10] = 0x64c; - data[11] = 0x3fa6d8; - data[12] = 0x8; - data[13] = 0x3fa6e0; - data[14] = 0x28; - data[15] = 0xb; - data[16] = 0x546f7070; - data[17] = 0x634b6572; - data[18] = 0x6e656c00; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0xe9acbb39; - data[27] = 0x3ff800; - data[28] = 0x800; - data[29] = 0x1; - data[30] = 0x803730; - data[31] = 0x1fc8cc; - data[32] = 0x30; - data[33] = 0x6; - data[34] = 0x3f98a8; - data[35] = 0x3f9914; - data[36] = 0x3f9acc; - data[37] = 0x802000; - data[38] = 0x80330c; - data[39] = 0x8034dc; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x22d4cc; - data[45] = 0x618a7525; - data[46] = 0x10e09e0; - data[47] = 0x10bbbfc; - data[48] = 0x10bbc04; - data[49] = 0x10bbc08; - data[50] = 0x10e09e0; - data[51] = 0x22d4f0; - data[52] = 0x618a7620; - data[53] = 0x10bbbe0; - data[54] = 0x0; - data[55] = 0x22d4ec; - data[56] = 0x618a6660; - data[57] = 0x0; - data[58] = 0x10e0a20; - data[59] = 0x10e09e0; - data[60] = 0x22d4fc; - data[61] = 0x618f1be6; - data[62] = 0x10bbbe0; - data[63] = 0x22d51c; - data[64] = 0x618f2ed4; - data[65] = 0x10bbc20; - data[66] = 0x10bbbe0; - data[67] = 0x2; - data[68] = 0x22d608; - data[69] = 0x618f4939; - data[70] = 0x4d; - data[71] = 0x2de; - data[72] = 0x22d62c; - data[73] = 0x618e01a4; - data[74] = 0xb000d; - data[75] = 0x1; - data[76] = 0x0; - data[77] = 0xffffffff; - data[78] = 0x1; - data[79] = 0x5fbb08; - data[80] = 0x2c2; - data[81] = 0x5fbb08; - data[82] = 0x22d568; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x10e25e0; - data[86] = 0x0; - data[87] = 0x22d588; - data[88] = 0x618f2f10; - data[89] = 0x10be680; - data[90] = 0x22d588; - data[91] = 0x618f2fe6; - data[92] = 0x10bbc20; - data[93] = 0xdbbe0; - data[94] = 0x3f; - data[95] = 0x22d674; - data[96] = 0x618f4939; - data[97] = 0x1; - data[98] = 0x1; - data[99] = 0x1; - data[100] = 0x10be340; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3f9bf0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ffb0; - data[1] = 0xbf810040; - data[2] = 0x3be10038; - data[3] = 0x3bc30000; - data[4] = 0x3ba40000; - data[5] = 0x3c600030; - data[6] = 0x38836102; - data[7] = 0x38a08000; - data[8] = 0xb0a40000; - data[9] = 0x2c9e0000; - data[10] = 0x4085004c; - data[11] = 0x3cc00030; - data[12] = 0x38e66100; - data[13] = 0x39000000; - data[14] = 0xb1070000; - data[15] = 0x1f9d2710; - data[16] = 0x339cffff; - data[17] = 0x2f1c0000; - data[18] = 0x4199fff8; - data[19] = 0x3d200030; - data[20] = 0x39496100; - data[21] = 0x39608000; - data[22] = 0xb16a0000; - data[23] = 0x1f9d2710; - data[24] = 0x339cffff; - data[25] = 0x2f9c0000; - data[26] = 0x419dfff8; - data[27] = 0x33deffff; - data[28] = 0x4280ffb4; - data[29] = 0x383fffc8; - data[30] = 0xbb810040; - data[31] = 0x38210050; - data[32] = 0x4e800020; - data[33] = 0x9421ffb0; - data[34] = 0x7c0802a6; - data[35] = 0x9001004c; - data[36] = 0xbfc10044; - data[37] = 0x3be10038; - data[38] = 0x90410014; - data[39] = 0x7fcc42e6; - data[40] = 0x387e0000; - data[41] = 0x42800008; - data[42] = 0x7fe00008; - data[43] = 0x383fffc8; - data[44] = 0xbbc10044; - data[45] = 0x8001004c; - data[46] = 0x7c0803a6; - data[47] = 0x38210050; - data[48] = 0x4e800020; - data[49] = 0x9421ffb8; - data[50] = 0x7c0802a6; - data[51] = 0x90010044; - data[52] = 0xbfa10038; - data[53] = 0x3be10038; - data[54] = 0x90410014; - data[55] = 0x3bc30000; - data[56] = 0x3ba40000; - data[57] = 0x4bffffa1; - data[58] = 0x90620018; - data[59] = 0x81820018; - data[60] = 0x3c60000f; - data[61] = 0x38834240; - data[62] = 0x7cac23d7; - data[63] = 0x40800008; - data[64] = 0x30a5ffff; - data[65] = 0x90be0000; - data[66] = 0x80c20018; - data[67] = 0x38e003e8; - data[68] = 0x7d063bd7; - data[69] = 0x40800008; - data[70] = 0x3108ffff; - data[71] = 0x392003e8; - data[72] = 0x7d484bd6; - data[73] = 0x7d4a49d6; - data[74] = 0x7d4a4011; - data[75] = 0x40800008; - data[76] = 0x314a03e8; - data[77] = 0xb15d0000; - data[78] = 0x383fffc8; - data[79] = 0xbba10038; - data[80] = 0x80010044; - data[81] = 0x7c0803a6; - data[82] = 0x38210048; - data[83] = 0x4e800020; - data[84] = 0x9421ff98; - data[85] = 0xbf21004c; - data[86] = 0x3be10038; - data[87] = 0x3bc30000; - data[88] = 0x3ba40000; - data[89] = 0x3b7e0000; - data[90] = 0x3b800000; - data[91] = 0x7c9be800; - data[92] = 0x40840070; - data[93] = 0xa33b0000; - data[94] = 0x7f9ccb78; - data[95] = 0x3b40000f; - data[96] = 0x578b0001; - data[97] = 0x4182000c; - data[98] = 0x6b8c8000; - data[99] = 0x6d9c0810; - data[100] = 0x57830801; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x4182000c; - data[1] = 0x6b844000; - data[2] = 0x6c9c0408; - data[3] = 0x57851001; - data[4] = 0x4182000c; - data[5] = 0x6b862000; - data[6] = 0x6cdc0204; - data[7] = 0x579c1838; - data[8] = 0x335afffd; - data[9] = 0x2f1a0000; - data[10] = 0x409affc4; - data[11] = 0x57870001; - data[12] = 0x41820010; - data[13] = 0x5788083c; - data[14] = 0x6d1c1021; - data[15] = 0x42800008; - data[16] = 0x579c083c; - data[17] = 0x337b0002; - data[18] = 0x4280ff90; - data[19] = 0x3b400010; - data[20] = 0x57890001; - data[21] = 0x41820010; - data[22] = 0x578a083c; - data[23] = 0x6d5c1021; - data[24] = 0x42800008; - data[25] = 0x579c083c; - data[26] = 0x335affff; - data[27] = 0x2f9a0000; - data[28] = 0x409effe0; - data[29] = 0x578b843e; - data[30] = 0x386b0000; - data[31] = 0x42800008; - data[32] = 0x7fe00008; - data[33] = 0x383fffc8; - data[34] = 0xbb21004c; - data[35] = 0x38210068; - data[36] = 0x4e800020; - data[37] = 0x9421ffc0; - data[38] = 0xbfe1003c; - data[39] = 0x3be10038; - data[40] = 0x42800000; - data[41] = 0x383fffc8; - data[42] = 0xbbe1003c; - data[43] = 0x38210040; - data[44] = 0x4e800020; - data[45] = 0x9421ffb8; - data[46] = 0x7c0802a6; - data[47] = 0x90010044; - data[48] = 0xbfa10038; - data[49] = 0x3be10038; - data[50] = 0x90410014; - data[51] = 0x3bc30000; - data[52] = 0x3ba40000; - data[53] = 0x2c9e027e; - data[54] = 0x40860014; - data[55] = 0x2f1d0800; - data[56] = 0x409a000c; - data[57] = 0x3bc00800; - data[58] = 0x7fde9ba6; - data[59] = 0x2f9e009e; - data[60] = 0x409e000c; - data[61] = 0x3bdd0000; - data[62] = 0x7fde23a6; - data[63] = 0x383fffc8; - data[64] = 0xbba10038; - data[65] = 0x80010044; - data[66] = 0x7c0803a6; - data[67] = 0x38210048; - data[68] = 0x4e800020; - data[69] = 0x9421ff38; - data[70] = 0x7c0802a6; - data[71] = 0x900100c4; - data[72] = 0xbde10080; - data[73] = 0x3be10038; - data[74] = 0x90410014; - data[75] = 0x3d800030; - data[76] = 0x386cc000; - data[77] = 0x3c800004; - data[78] = 0x90830000; - data[79] = 0x3ca00030; - data[80] = 0x38c5c284; - data[81] = 0x3ce00090; - data[82] = 0x90e60000; - data[83] = 0x3d000030; - data[84] = 0x3928c284; - data[85] = 0x82090000; - data[86] = 0x560a7801; - data[87] = 0x4182fff0; - data[88] = 0x3d600030; - data[89] = 0x398b7f80; - data[90] = 0x38600000; - data[91] = 0x906c0000; - data[92] = 0x3860009e; - data[93] = 0x38800007; - data[94] = 0x4bffff3d; - data[95] = 0x3c800030; - data[96] = 0x38a4c100; - data[97] = 0x3cc00100; - data[98] = 0x38e60003; - data[99] = 0x90e50000; - data[100] = 0x3d000030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x3928c104; - data[1] = 0x3d40ffc0; - data[2] = 0x396a0020; - data[3] = 0x91690000; - data[4] = 0x3d800030; - data[5] = 0x386cc108; - data[6] = 0x3c800080; - data[7] = 0x38a40003; - data[8] = 0x90a30000; - data[9] = 0x3cc00030; - data[10] = 0x38e6c10c; - data[11] = 0x3d00ffe0; - data[12] = 0x39280020; - data[13] = 0x91270000; - data[14] = 0x3d400030; - data[15] = 0x396ac03c; - data[16] = 0x39800000; - data[17] = 0xb18b0000; - data[18] = 0x3c600030; - data[19] = 0x3883c280; - data[20] = 0x3ca08121; - data[21] = 0x38c50300; - data[22] = 0x90c40000; - data[23] = 0x3ce00030; - data[24] = 0x3907c200; - data[25] = 0x39200001; - data[26] = 0xb1280000; - data[27] = 0x3d400030; - data[28] = 0x396ac288; - data[29] = 0xa1eb0000; - data[30] = 0x55ecd001; - data[31] = 0x4082000c; - data[32] = 0x55e38001; - data[33] = 0x4182008c; - data[34] = 0x3c800030; - data[35] = 0x38a4c004; - data[36] = 0x38c0ff83; - data[37] = 0x90c50000; - data[38] = 0x3ce00030; - data[39] = 0x3907c140; - data[40] = 0x39200001; - data[41] = 0x91280000; - data[42] = 0x3d400030; - data[43] = 0x396ac144; - data[44] = 0x3d807e00; - data[45] = 0x918b0000; - data[46] = 0x3c600100; - data[47] = 0x38832010; - data[48] = 0x82240000; - data[49] = 0x3ca00040; - data[50] = 0x38c59800; - data[51] = 0x3ce00100; - data[52] = 0x39072000; - data[53] = 0x3926fffc; - data[54] = 0x40860014; - data[55] = 0x2f1d0800; - data[56] = 0x409a000c; - data[57] = 0x3bc00800; - data[58] = 0x7fde9ba6; - data[59] = 0x2f9e009e; - data[60] = 0x409e000c; - data[61] = 0x3bdd0000; - data[62] = 0x7fde23a6; - data[63] = 0x383fffc8; - data[64] = 0xbba10038; - data[65] = 0x80010044; - data[66] = 0x7c0803a6; - data[67] = 0x38210048; - data[68] = 0x4e800020; - data[69] = 0x9421ff38; - data[70] = 0x7c0802a6; - data[71] = 0x900100c4; - data[72] = 0xbde10080; - data[73] = 0x3be10038; - data[74] = 0x90410014; - data[75] = 0x3d800030; - data[76] = 0x386cc000; - data[77] = 0x3c800004; - data[78] = 0x90830000; - data[79] = 0x3ca00030; - data[80] = 0x38c5c284; - data[81] = 0x3ce00090; - data[82] = 0x90e60000; - data[83] = 0x3d000030; - data[84] = 0x3928c284; - data[85] = 0x82090000; - data[86] = 0x560a7801; - data[87] = 0x4182fff0; - data[88] = 0x3d600030; - data[89] = 0x398b7f80; - data[90] = 0x38600000; - data[91] = 0x906c0000; - data[92] = 0x3860009e; - data[93] = 0x38800007; - data[94] = 0x4bffff3d; - data[95] = 0x3c800030; - data[96] = 0x38a4c100; - data[97] = 0x3cc00100; - data[98] = 0x38e60003; - data[99] = 0x90e50000; - data[100] = 0x3d000030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3f9ff0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x3948fffc; - data[1] = 0x562be8ff; - data[2] = 0x7d6903a6; - data[3] = 0x562c077e; - data[4] = 0x7d8103a6; - data[5] = 0x41820018; - data[6] = 0x856a0004; - data[7] = 0x858a0004; - data[8] = 0x95690004; - data[9] = 0x95890004; - data[10] = 0x4200fff0; - data[11] = 0x38600004; - data[12] = 0x7d63542a; - data[13] = 0x7d634d2a; - data[14] = 0x3c800040; - data[15] = 0x3bc49814; - data[16] = 0x83de0000; - data[17] = 0x3cbe0040; - data[18] = 0x3bc59808; - data[19] = 0x3a600000; - data[20] = 0x38c00000; - data[21] = 0x90c20000; - data[22] = 0x83be0000; - data[23] = 0x2c9d0000; - data[24] = 0x40860008; - data[25] = 0x42800184; - data[26] = 0x825d0000; - data[27] = 0x30f20001; - data[28] = 0x54e8103a; - data[29] = 0x7f7d4214; - data[30] = 0x82db0010; - data[31] = 0x833b001c; - data[32] = 0x387d0000; - data[33] = 0x7c9dca14; - data[34] = 0x4bfffcc9; - data[35] = 0x2f030000; - data[36] = 0x419a0014; - data[37] = 0x38600008; - data[38] = 0x38800010; - data[39] = 0x4bfffb65; - data[40] = 0x4280fff4; - data[41] = 0x839b0020; - data[42] = 0x833b0024; - data[43] = 0x387c0000; - data[44] = 0x7c9cca14; - data[45] = 0x4bfffc9d; - data[46] = 0x2f830000; - data[47] = 0x419e0020; - data[48] = 0x38600010; - data[49] = 0x38800008; - data[50] = 0x4bfffb39; - data[51] = 0x38600004; - data[52] = 0x38800040; - data[53] = 0x4bfffb2d; - data[54] = 0x4280ffe8; - data[55] = 0x835b0008; - data[56] = 0x833b000c; - data[57] = 0x831b0028; - data[58] = 0x3938fffc; - data[59] = 0x395afffc; - data[60] = 0x572be8ff; - data[61] = 0x7d6903a6; - data[62] = 0x572c077e; - data[63] = 0x7d8103a6; - data[64] = 0x41820018; - data[65] = 0x856a0004; - data[66] = 0x858a0004; - data[67] = 0x95690004; - data[68] = 0x95890004; - data[69] = 0x4200fff0; - data[70] = 0x38600004; - data[71] = 0x7d63542a; - data[72] = 0x7d634d2a; - data[73] = 0x82fb0030; - data[74] = 0x3ab70000; - data[75] = 0x829b0034; - data[76] = 0x7e94aa14; - data[77] = 0x7c95a000; - data[78] = 0x40840014; - data[79] = 0x38800000; - data[80] = 0x90950000; - data[81] = 0x32b50004; - data[82] = 0x4280ffec; - data[83] = 0x2f130000; - data[84] = 0x419a0070; - data[85] = 0x38bf0040; - data[86] = 0x92c50000; - data[87] = 0x38df0040; - data[88] = 0x92e60004; - data[89] = 0x801f0040; - data[90] = 0x7c0903a6; - data[91] = 0x805f0044; - data[92] = 0x4e800421; - data[93] = 0x80410014; - data[94] = 0x2f930002; - data[95] = 0x409e0040; - data[96] = 0x3ce00030; - data[97] = 0x3907c018; - data[98] = 0x3d20ffff; - data[99] = 0x91280000; - data[100] = 0x3d400030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x396ac010; - data[1] = 0x3d80ffff; - data[2] = 0x918b0000; - data[3] = 0x3c600030; - data[4] = 0x3883c014; - data[5] = 0x3ca0ffff; - data[6] = 0x90a40000; - data[7] = 0x7e0000a6; - data[8] = 0x62108000; - data[9] = 0x7e000124; - data[10] = 0x42800014; - data[11] = 0x3cc00040; - data[12] = 0x38e69e18; - data[13] = 0x90e20010; - data[14] = 0x90420014; - data[15] = 0x81020000; - data[16] = 0x31280001; - data[17] = 0x91220000; - data[18] = 0x32730001; - data[19] = 0x33de0004; - data[20] = 0x4280fe74; - data[21] = 0x383fffc8; - data[22] = 0xb9e10080; - data[23] = 0x800100c4; - data[24] = 0x7c0803a6; - data[25] = 0x382100c8; - data[26] = 0x4e800020; - data[27] = 0x9421ffc0; - data[28] = 0x7c0802a6; - data[29] = 0x9001003c; - data[30] = 0xbfe10038; - data[31] = 0x3be10038; - data[32] = 0x90410014; - data[33] = 0x4bfffc91; - data[34] = 0x80020010; - data[35] = 0x7c0903a6; - data[36] = 0x80420014; - data[37] = 0x4e800421; - data[38] = 0x80410014; - data[39] = 0x383fffc8; - data[40] = 0xbbe10038; - data[41] = 0x8001003c; - data[42] = 0x7c0803a6; - data[43] = 0x38210040; - data[44] = 0x4e800020; - data[45] = 0xecf41b66; - data[46] = 0x2f830000; - data[47] = 0x419e0020; - data[48] = 0x38600010; - data[49] = 0x38800008; - data[50] = 0x4bfffb39; - data[51] = 0x38600004; - data[52] = 0x38800040; - data[53] = 0x4bfffb2d; - data[54] = 0x4280ffe8; - data[55] = 0x835b0008; - data[56] = 0x833b000c; - data[57] = 0x831b0028; - data[58] = 0x3938fffc; - data[59] = 0x395afffc; - data[60] = 0x572be8ff; - data[61] = 0x7d6903a6; - data[62] = 0x572c077e; - data[63] = 0x7d8103a6; - data[64] = 0x41820018; - data[65] = 0x856a0004; - data[66] = 0x858a0004; - data[67] = 0x95690004; - data[68] = 0x95890004; - data[69] = 0x4200fff0; - data[70] = 0x38600004; - data[71] = 0x7d63542a; - data[72] = 0x7d634d2a; - data[73] = 0x82fb0030; - data[74] = 0x3ab70000; - data[75] = 0x829b0034; - data[76] = 0x7e94aa14; - data[77] = 0x7c95a000; - data[78] = 0x40840014; - data[79] = 0x38800000; - data[80] = 0x90950000; - data[81] = 0x32b50004; - data[82] = 0x4280ffec; - data[83] = 0x2f130000; - data[84] = 0x419a0070; - data[85] = 0x38bf0040; - data[86] = 0x92c50000; - data[87] = 0x38df0040; - data[88] = 0x92e60004; - data[89] = 0x801f0040; - data[90] = 0x7c0903a6; - data[91] = 0x805f0044; - data[92] = 0x4e800421; - data[93] = 0x80410014; - data[94] = 0x2f930002; - data[95] = 0x409e0040; - data[96] = 0x3ce00030; - data[97] = 0x3907c018; - data[98] = 0x3d20ffff; - data[99] = 0x91280000; - data[100] = 0x3d400030; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3f9914; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x3f9950; - data[2] = 0x3f9994; - data[3] = 0x3f9974; - data[4] = 0x18; - data[5] = 0x3fa6a0; - data[6] = 0x0; - data[7] = 0x3f9914; - data[8] = 0x1b8; - data[9] = 0x3fa23c; - data[10] = 0x49c; - data[11] = 0x3fa708; - data[12] = 0x18; - data[13] = 0x3fa720; - data[14] = 0x440; - data[15] = 0x9; - data[16] = 0x546f7070; - data[17] = 0x63486561; - data[18] = 0x70000000; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x3fa6e0; - data[27] = 0x3f9a6c; - data[28] = 0x3f99fc; - data[29] = 0x3f9994; - data[30] = 0xffffffff; - data[31] = 0xffffffff; - data[32] = 0x4; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0xfffffffc; - data[36] = 0x3f9914; - data[37] = 0x3f9950; - data[38] = 0x3f99d8; - data[39] = 0x3f99fc; - data[40] = 0x3f9994; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0xffffffc0; - data[49] = 0x12; - data[50] = 0x54797065; - data[51] = 0x44657363; - data[52] = 0x72697074; - data[53] = 0x6f724465; - data[54] = 0x73630000; - data[55] = 0x0; - data[56] = 0xffffffff; - data[57] = 0xffffffff; - data[58] = 0x10; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0xfffffff8; - data[62] = 0x3f9914; - data[63] = 0x3f9950; - data[64] = 0x3f9a4c; - data[65] = 0x3f9a6c; - data[66] = 0x3f99fc; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x8; - data[76] = 0xc; - data[77] = 0xffffffb4; - data[78] = 0xd; - data[79] = 0x46726565; - data[80] = 0x426c6f63; - data[81] = 0x6b446573; - data[82] = 0x63000000; - data[83] = 0x0; - data[84] = 0xffffffff; - data[85] = 0xffffffff; - data[86] = 0x8; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0xfffffff4; - data[90] = 0x3f9914; - data[91] = 0x3f9950; - data[92] = 0x3f9ab4; - data[93] = 0x0; - data[94] = 0x3f9a6c; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0xffffffbc; - data[3] = 0x9; - data[4] = 0x426c6f63; - data[5] = 0x6b446573; - data[6] = 0x63000000; - data[7] = 0x0; - data[8] = 0xea187be9; - data[9] = 0x3fa23c; - data[10] = 0x49c; - data[11] = 0x3fa708; - data[12] = 0x18; - data[13] = 0x3fa720; - data[14] = 0x440; - data[15] = 0x9; - data[16] = 0x546f7070; - data[17] = 0x63486561; - data[18] = 0x70000000; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x3fa6e0; - data[27] = 0x3f9a6c; - data[28] = 0x3f99fc; - data[29] = 0x3f9994; - data[30] = 0xffffffff; - data[31] = 0xffffffff; - data[32] = 0x4; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0xfffffffc; - data[36] = 0x3f9914; - data[37] = 0x3f9950; - data[38] = 0x3f99d8; - data[39] = 0x3f99fc; - data[40] = 0x3f9994; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0xffffffc0; - data[49] = 0x12; - data[50] = 0x54797065; - data[51] = 0x44657363; - data[52] = 0x72697074; - data[53] = 0x6f724465; - data[54] = 0x73630000; - data[55] = 0x0; - data[56] = 0xffffffff; - data[57] = 0xffffffff; - data[58] = 0x10; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0xfffffff8; - data[62] = 0x3f9914; - data[63] = 0x3f9950; - data[64] = 0x3f9a4c; - data[65] = 0x3f9a6c; - data[66] = 0x3f99fc; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x8; - data[76] = 0xc; - data[77] = 0xffffffb4; - data[78] = 0xd; - data[79] = 0x46726565; - data[80] = 0x426c6f63; - data[81] = 0x6b446573; - data[82] = 0x63000000; - data[83] = 0x0; - data[84] = 0xffffffff; - data[85] = 0xffffffff; - data[86] = 0x8; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0xfffffff4; - data[90] = 0x3f9914; - data[91] = 0x3f9950; - data[92] = 0x3f9ab4; - data[93] = 0x0; - data[94] = 0x3f9a6c; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3fa23c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ff90; - data[1] = 0x7c000026; - data[2] = 0x9001006c; - data[3] = 0xbf210050; - data[4] = 0x3be10038; - data[5] = 0x3bc30000; - data[6] = 0x3ba00000; - data[7] = 0x3b800000; - data[8] = 0x7fd92670; - data[9] = 0x2c990009; - data[10] = 0x40850008; - data[11] = 0x3b200009; - data[12] = 0xcb9000a; - data[13] = 0x5723103a; - data[14] = 0x7c821a14; - data[15] = 0x83a40414; - data[16] = 0x2f1d0000; - data[17] = 0x409a0024; - data[18] = 0x2f990009; - data[19] = 0x409c001c; - data[20] = 0x33390001; - data[21] = 0xcb9000a; - data[22] = 0x5725103a; - data[23] = 0x7cc22a14; - data[24] = 0x83a60414; - data[25] = 0x4280ffdc; - data[26] = 0x2c9e0080; - data[27] = 0x40850044; - data[28] = 0x2f1d0000; - data[29] = 0x419a003c; - data[30] = 0x4e600182; - data[31] = 0x41930034; - data[32] = 0xe9d0000; - data[33] = 0x80fd0004; - data[34] = 0x7f9e3800; - data[35] = 0x409d0010; - data[36] = 0xe9d0000; - data[37] = 0x83bd0008; - data[38] = 0x42800008; - data[39] = 0x4e600242; - data[40] = 0x2c9d0000; - data[41] = 0x40860008; - data[42] = 0x4e600242; - data[43] = 0x4280ffd0; - data[44] = 0x2f1d0000; - data[45] = 0x409a0008; - data[46] = 0x42800000; - data[47] = 0xe9d0000; - data[48] = 0x811d000c; - data[49] = 0x2f880000; - data[50] = 0x409e0020; - data[51] = 0xcb9000a; - data[52] = 0x5729103a; - data[53] = 0x7d424a14; - data[54] = 0xe9d0000; - data[55] = 0x817d0008; - data[56] = 0x916a0414; - data[57] = 0x4280001c; - data[58] = 0xe9d0000; - data[59] = 0x819d000c; - data[60] = 0xe8c0000; - data[61] = 0xe9d0000; - data[62] = 0x807d0008; - data[63] = 0x906c0008; - data[64] = 0xe9d0000; - data[65] = 0x809d0008; - data[66] = 0x2c840000; - data[67] = 0x4186001c; - data[68] = 0xe9d0000; - data[69] = 0x80bd0008; - data[70] = 0xe850000; - data[71] = 0xe9d0000; - data[72] = 0x80dd000c; - data[73] = 0x90c5000c; - data[74] = 0xe9d0000; - data[75] = 0x837d0004; - data[76] = 0x80e2000c; - data[77] = 0x7d1b3810; - data[78] = 0x9102000c; - data[79] = 0x7f5ed810; - data[80] = 0x7f592670; - data[81] = 0x2f190000; - data[82] = 0x4099008c; - data[83] = 0x8122000c; - data[84] = 0x7d49d214; - data[85] = 0x9142000c; - data[86] = 0x2f990009; - data[87] = 0x409d0008; - data[88] = 0x3b200009; - data[89] = 0x7d7df214; - data[90] = 0x3b8b0000; - data[91] = 0xe9c0000; - data[92] = 0x319c0004; - data[93] = 0x919c0000; - data[94] = 0xe9c0000; - data[95] = 0x935c0004; - data[96] = 0xe9c0000; - data[97] = 0xcb9000a; - data[98] = 0x5723103a; - data[99] = 0x7c821a14; - data[100] = 0x80a40414; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x90bc0008; - data[1] = 0xe9c0000; - data[2] = 0x80dc0008; - data[3] = 0x2c860000; - data[4] = 0x41860014; - data[5] = 0xe9c0000; - data[6] = 0x80fc0008; - data[7] = 0xe870000; - data[8] = 0x9387000c; - data[9] = 0xe9c0000; - data[10] = 0x39000000; - data[11] = 0x911c000c; - data[12] = 0xcb9000a; - data[13] = 0x5729103a; - data[14] = 0x7d424a14; - data[15] = 0x938a0414; - data[16] = 0x387d0000; - data[17] = 0x42800008; - data[18] = 0x7fe00008; - data[19] = 0x383fffc8; - data[20] = 0xbb210050; - data[21] = 0x8001006c; - data[22] = 0x7c0ff120; - data[23] = 0x38210070; - data[24] = 0x4e800020; - data[25] = 0x9421ff90; - data[26] = 0x7c0802a6; - data[27] = 0x9001006c; - data[28] = 0xbf410054; - data[29] = 0x3be10038; - data[30] = 0x90410014; - data[31] = 0x3b800000; - data[32] = 0x3bc30000; - data[33] = 0x317e0004; - data[34] = 0x318b0010; - data[35] = 0x306cffff; - data[36] = 0x54640036; - data[37] = 0x3bc40000; - data[38] = 0x387e0000; - data[39] = 0x4bfffdd1; - data[40] = 0x3b830000; - data[41] = 0xe9c0000; - data[42] = 0x3ca055aa; - data[43] = 0x38c555aa; - data[44] = 0x90dc0000; - data[45] = 0xe9c0000; - data[46] = 0x3b7c0004; - data[47] = 0x3ba00000; - data[48] = 0x335efff8; - data[49] = 0x7f1dd000; - data[50] = 0x41990014; - data[51] = 0x38e00000; - data[52] = 0x7cfbe92e; - data[53] = 0x33bd0004; - data[54] = 0x4280ffec; - data[55] = 0x387b0000; - data[56] = 0x383fffc8; - data[57] = 0xbb410054; - data[58] = 0x8001006c; - data[59] = 0x7c0803a6; - data[60] = 0x38210070; - data[61] = 0x4e800020; - data[62] = 0x9421ff90; - data[63] = 0x7c0802a6; - data[64] = 0x9001006c; - data[65] = 0xbf210050; - data[66] = 0x3be10038; - data[67] = 0x90410014; - data[68] = 0x3bc00000; - data[69] = 0x3b600000; - data[70] = 0x3bc30000; - data[71] = 0xe9e0000; - data[72] = 0x811e0000; - data[73] = 0x31280004; - data[74] = 0x31490010; - data[75] = 0x316affff; - data[76] = 0x556c0036; - data[77] = 0x3bac0000; - data[78] = 0x387d0000; - data[79] = 0x4bfffd31; - data[80] = 0x3b630000; - data[81] = 0xe9b0000; - data[82] = 0x93db0000; - data[83] = 0xe9b0000; - data[84] = 0x3b5b0004; - data[85] = 0x3b800000; - data[86] = 0x333dfff8; - data[87] = 0x7f9cc800; - data[88] = 0x419d0014; - data[89] = 0x38600000; - data[90] = 0x7c7ae12e; - data[91] = 0x339c0004; - data[92] = 0x4280ffec; - data[93] = 0x387a0000; - data[94] = 0x383fffc8; - data[95] = 0xbb210050; - data[96] = 0x8001006c; - data[97] = 0x7c0803a6; - data[98] = 0x38210070; - data[99] = 0x4e800020; - data[100] = 0x9421ffc0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0xbfe1003c; - data[1] = 0x3be10038; - data[2] = 0x383fffc8; - data[3] = 0xbbe1003c; - data[4] = 0x38210040; - data[5] = 0x4e800020; - data[6] = 0x9421ff60; - data[7] = 0xbe61006c; - data[8] = 0x3be10038; - data[9] = 0x3a600000; - data[10] = 0x3c800040; - data[11] = 0x38a49824; - data[12] = 0x82c50000; - data[13] = 0x3cd60040; - data[14] = 0x38e69800; - data[15] = 0x81070004; - data[16] = 0x91020004; - data[17] = 0x3d360040; - data[18] = 0x39499800; - data[19] = 0x816a0008; - data[20] = 0x91620000; - data[21] = 0x82a20004; - data[22] = 0x81820004; - data[23] = 0x80620000; - data[24] = 0x7e8c1a14; - data[25] = 0x38800000; - data[26] = 0x90950000; - data[27] = 0x32b50004; - data[28] = 0x7c95a000; - data[29] = 0x4184fff0; - data[30] = 0x80a20000; - data[31] = 0x54a6073e; - data[32] = 0x80e20000; - data[33] = 0x7d063810; - data[34] = 0x91020000; - data[35] = 0x81220004; - data[36] = 0x81420000; - data[37] = 0x7d695214; - data[38] = 0x91620008; - data[39] = 0x81820000; - data[40] = 0x9182000c; - data[41] = 0x3bc00000; - data[42] = 0x2f1e0009; - data[43] = 0x41990020; - data[44] = 0xcbe000a; - data[45] = 0x57c3103a; - data[46] = 0x7c821a14; - data[47] = 0x38a00000; - data[48] = 0x90a40414; - data[49] = 0x33de0001; - data[50] = 0x4280ffe0; - data[51] = 0x82620004; - data[52] = 0xe930000; - data[53] = 0xe930000; - data[54] = 0x4280ffec; - data[55] = 0x387b0000; - data[56] = 0x383fffc8; - data[57] = 0xbb410054; - data[58] = 0x8001006c; - data[59] = 0x7c0803a6; - data[60] = 0x38210070; - data[61] = 0x4e800020; - data[62] = 0x9421ff90; - data[63] = 0x7c0802a6; - data[64] = 0x9001006c; - data[65] = 0xbf210050; - data[66] = 0x3be10038; - data[67] = 0x90410014; - data[68] = 0x3bc00000; - data[69] = 0x3b600000; - data[70] = 0x3bc30000; - data[71] = 0xe9e0000; - data[72] = 0x811e0000; - data[73] = 0x31280004; - data[74] = 0x31490010; - data[75] = 0x316affff; - data[76] = 0x556c0036; - data[77] = 0x3bac0000; - data[78] = 0x387d0000; - data[79] = 0x4bfffd31; - data[80] = 0x3b630000; - data[81] = 0xe9b0000; - data[82] = 0x93db0000; - data[83] = 0xe9b0000; - data[84] = 0x3b5b0004; - data[85] = 0x3b800000; - data[86] = 0x333dfff8; - data[87] = 0x7f9cc800; - data[88] = 0x419d0014; - data[89] = 0x38600000; - data[90] = 0x7c7ae12e; - data[91] = 0x339c0004; - data[92] = 0x4280ffec; - data[93] = 0x387a0000; - data[94] = 0x383fffc8; - data[95] = 0xbb210050; - data[96] = 0x8001006c; - data[97] = 0x7c0803a6; - data[98] = 0x38210070; - data[99] = 0x4e800020; - data[100] = 0x9421ffc0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3fa63c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x38d30004; - data[1] = 0x90d30000; - data[2] = 0xe930000; - data[3] = 0x80e20000; - data[4] = 0x90f30004; - data[5] = 0xe930000; - data[6] = 0x39000000; - data[7] = 0x91130008; - data[8] = 0xe930000; - data[9] = 0x81330004; - data[10] = 0x7d3e2670; - data[11] = 0x2f9e0009; - data[12] = 0x409d0008; - data[13] = 0x3bc00009; - data[14] = 0xcbe000a; - data[15] = 0x57ca103a; - data[16] = 0x7d625214; - data[17] = 0x926b0414; - data[18] = 0xe930000; - data[19] = 0x39800000; - data[20] = 0x9193000c; - data[21] = 0x383fffc8; - data[22] = 0xba61006c; - data[23] = 0x382100a0; - data[24] = 0x4e800020; - data[25] = 0x9421ffc0; - data[26] = 0x7c0802a6; - data[27] = 0x9001003c; - data[28] = 0xbfe10038; - data[29] = 0x3be10038; - data[30] = 0x90410014; - data[31] = 0x4bfffec5; - data[32] = 0x383fffc8; - data[33] = 0xbbe10038; - data[34] = 0x8001003c; - data[35] = 0x7c0803a6; - data[36] = 0x38210040; - data[37] = 0x4e800020; - data[38] = 0xf340dd8b; - data[39] = 0x81820000; - data[40] = 0x9182000c; - data[41] = 0x3bc00000; - data[42] = 0x2f1e0009; - data[43] = 0x41990020; - data[44] = 0xcbe000a; - data[45] = 0x57c3103a; - data[46] = 0x7c821a14; - data[47] = 0x38a00000; - data[48] = 0x90a40414; - data[49] = 0x33de0001; - data[50] = 0x4280ffe0; - data[51] = 0x82620004; - data[52] = 0xe930000; - data[53] = 0xe930000; - data[54] = 0x4280ffec; - data[55] = 0x387b0000; - data[56] = 0x383fffc8; - data[57] = 0xbb410054; - data[58] = 0x8001006c; - data[59] = 0x7c0803a6; - data[60] = 0x38210070; - data[61] = 0x4e800020; - data[62] = 0x9421ff90; - data[63] = 0x7c0802a6; - data[64] = 0x9001006c; - data[65] = 0xbf210050; - data[66] = 0x3be10038; - data[67] = 0x90410014; - data[68] = 0x3bc00000; - data[69] = 0x3b600000; - data[70] = 0x3bc30000; - data[71] = 0xe9e0000; - data[72] = 0x811e0000; - data[73] = 0x31280004; - data[74] = 0x31490010; - data[75] = 0x316affff; - data[76] = 0x556c0036; - data[77] = 0x3bac0000; - data[78] = 0x387d0000; - data[79] = 0x4bfffd31; - data[80] = 0x3b630000; - data[81] = 0xe9b0000; - data[82] = 0x93db0000; - data[83] = 0xe9b0000; - data[84] = 0x3b5b0004; - data[85] = 0x3b800000; - data[86] = 0x333dfff8; - data[87] = 0x7f9cc800; - data[88] = 0x419d0014; - data[89] = 0x38600000; - data[90] = 0x7c7ae12e; - data[91] = 0x339c0004; - data[92] = 0x4280ffec; - data[93] = 0x387a0000; - data[94] = 0x383fffc8; - data[95] = 0xbb210050; - data[96] = 0x8001006c; - data[97] = 0x7c0803a6; - data[98] = 0x38210070; - data[99] = 0x4e800020; - data[100] = 0x9421ffc0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x3f9acc; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x10; - data[1] = 0x3faba0; - data[2] = 0x3faba4; - data[3] = 0x3faba8; - data[4] = 0x3fabac; - data[5] = 0x3fabb0; - data[6] = 0x3fabb4; - data[7] = 0x3fabb8; - data[8] = 0x3fabbc; - data[9] = 0x3fabc0; - data[10] = 0x3fabc4; - data[11] = 0x3fabc8; - data[12] = 0x3fabcc; - data[13] = 0x3fabd0; - data[14] = 0x3fabd4; - data[15] = 0x3fabd8; - data[16] = 0x3fabdc; - data[17] = 0x3f9b48; - data[18] = 0x3f9b8c; - data[19] = 0x3f9b6c; - data[20] = 0x10; - data[21] = 0x1fbc; - data[22] = 0x0; - data[23] = 0x3f9acc; - data[24] = 0x124; - data[25] = 0x0; - data[26] = 0x1ff4; - data[27] = 0x3fab60; - data[28] = 0x10; - data[29] = 0x3fab70; - data[30] = 0x70; - data[31] = 0xf; - data[32] = 0x546f7070; - data[33] = 0x63457863; - data[34] = 0x65707469; - data[35] = 0x6f6e7300; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x3fa720; - data[42] = 0x3fa6e0; - data[43] = 0x3f9b8c; - data[44] = 0x0; - data[45] = 0x3fab70; - data[46] = 0xffffffff; - data[47] = 0xffffffff; - data[48] = 0x14; - data[49] = 0x0; - data[50] = 0x1; - data[51] = 0xfffffffc; - data[52] = 0x3f9acc; - data[53] = 0x3f9b48; - data[54] = 0x3f9bd4; - data[55] = 0x0; - data[56] = 0x3f9b8c; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x10; - data[65] = 0xffffffbc; - data[66] = 0xd; - data[67] = 0x496e7465; - data[68] = 0x72727570; - data[69] = 0x74446573; - data[70] = 0x63000000; - data[71] = 0x0; - data[72] = 0xebd013b6; - data[73] = 0x31280004; - data[74] = 0x31490010; - data[75] = 0x316affff; - data[76] = 0x556c0036; - data[77] = 0x3bac0000; - data[78] = 0x387d0000; - data[79] = 0x4bfffd31; - data[80] = 0x3b630000; - data[81] = 0xe9b0000; - data[82] = 0x93db0000; - data[83] = 0xe9b0000; - data[84] = 0x3b5b0004; - data[85] = 0x3b800000; - data[86] = 0x333dfff8; - data[87] = 0x7f9cc800; - data[88] = 0x419d0014; - data[89] = 0x38600000; - data[90] = 0x7c7ae12e; - data[91] = 0x339c0004; - data[92] = 0x4280ffec; - data[93] = 0x387a0000; - data[94] = 0x383fffc8; - data[95] = 0xbb210050; - data[96] = 0x8001006c; - data[97] = 0x7c0803a6; - data[98] = 0x38210070; - data[99] = 0x4e800020; - data[100] = 0x9421ffc0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x0; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ffc0; - data[1] = 0xbfc10038; - data[2] = 0x3be10038; - data[3] = 0x3bc30000; - data[4] = 0x80620008; - data[5] = 0x30830001; - data[6] = 0x90820008; - data[7] = 0x383fffc8; - data[8] = 0xbbc10038; - data[9] = 0x38210040; - data[10] = 0x4e800020; - data[11] = 0x9421ffb0; - data[12] = 0xbf810040; - data[13] = 0x3be10038; - data[14] = 0x3bc30000; - data[15] = 0x3ba40000; - data[16] = 0x3ca00030; - data[17] = 0x38c56102; - data[18] = 0x38e08000; - data[19] = 0xb0e60000; - data[20] = 0x2c9e0000; - data[21] = 0x4085004c; - data[22] = 0x3d000030; - data[23] = 0x39286100; - data[24] = 0x39400000; - data[25] = 0xb1490000; - data[26] = 0x1f9d2710; - data[27] = 0x339cffff; - data[28] = 0x2f1c0000; - data[29] = 0x4199fff8; - data[30] = 0x3d600030; - data[31] = 0x398b6100; - data[32] = 0x38608000; - data[33] = 0xb06c0000; - data[34] = 0x1f9d2710; - data[35] = 0x339cffff; - data[36] = 0x2f9c0000; - data[37] = 0x419dfff8; - data[38] = 0x33deffff; - data[39] = 0x4280ffb4; - data[40] = 0x383fffc8; - data[41] = 0xbb810040; - data[42] = 0x38210050; - data[43] = 0x4e800020; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x9421ff24; - data[47] = 0x900100c0; - data[48] = 0x7c1a02a6; - data[49] = 0x900100c4; - data[50] = 0x7c1b02a6; - data[51] = 0x900100c8; - data[52] = 0x7c1113a6; - data[53] = 0x7c0802a6; - data[54] = 0x900100d0; - data[55] = 0x7c000026; - data[56] = 0x900100d4; - data[57] = 0x7c0902a6; - data[58] = 0x900100d8; - data[59] = 0xbc410048; - data[60] = 0x3be10038; - data[61] = 0x3c400040; - data[62] = 0x3842ab70; - data[63] = 0x90410014; - data[64] = 0x3c800040; - data[65] = 0x3824ffe0; - data[66] = 0x3ca00100; - data[67] = 0x38c52014; - data[68] = 0x83c60000; - data[69] = 0x3cfe0100; - data[70] = 0x39072000; - data[71] = 0x83a80008; - data[72] = 0x839d0000; - data[73] = 0x313d0004; - data[74] = 0x578a103a; - data[75] = 0x7d695214; - data[76] = 0x836b0030; - data[77] = 0x385b0000; - data[78] = 0x319d0004; - data[79] = 0x5783103a; - data[80] = 0x7c8c1a14; - data[81] = 0x83640010; - data[82] = 0x387b0000; - data[83] = 0x7c7a03a6; - data[84] = 0x38603802; - data[85] = 0x7c7b03a6; - data[86] = 0x4c000064; - data[87] = 0x383fffc8; - data[88] = 0xb8410048; - data[89] = 0x800100d8; - data[90] = 0x7c0903a6; - data[91] = 0x800100d4; - data[92] = 0x7c0ff120; - data[93] = 0x800100d0; - data[94] = 0x7c0803a6; - data[95] = 0x800100c8; - data[96] = 0x7c1b03a6; - data[97] = 0x800100c4; - data[98] = 0x7c1a03a6; - data[99] = 0x800100c0; - data[100] = 0x382100dc; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x4c000064; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421ff34; - data[28] = 0x900100b0; - data[29] = 0x7c1a02a6; - data[30] = 0x900100b4; - data[31] = 0x7c1b02a6; - data[32] = 0x900100b8; - data[33] = 0x7c1113a6; - data[34] = 0x7c0802a6; - data[35] = 0x900100c0; - data[36] = 0x7c000026; - data[37] = 0x900100c4; - data[38] = 0x7c0902a6; - data[39] = 0x900100c8; - data[40] = 0xbc410038; - data[41] = 0x3be10038; - data[42] = 0x3c400040; - data[43] = 0x3842ab70; - data[44] = 0x90410014; - data[45] = 0x80a20000; - data[46] = 0x30c50001; - data[47] = 0x90c20000; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4bfffdd1; - data[51] = 0x4280fff4; - data[52] = 0x383fffc8; - data[53] = 0xb8410038; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421ffa0; - data[92] = 0x7c0802a6; - data[93] = 0x9001005c; - data[94] = 0xbf610048; - data[95] = 0x3be10038; - data[96] = 0x90410014; - data[97] = 0x3b800000; - data[98] = 0x3ce00030; - data[99] = 0x3907c010; - data[100] = 0xa3a80000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x3bc00010; - data[1] = 0x33deffff; - data[2] = 0x7fc9f0f8; - data[3] = 0x5fa94801; - data[4] = 0x4182011c; - data[5] = 0x315e0001; - data[6] = 0x3960000f; - data[7] = 0x3d808000; - data[8] = 0x7d8c5e30; - data[9] = 0x7d8c5030; - data[10] = 0x5d8c583e; - data[11] = 0x558c083e; - data[12] = 0x3c600030; - data[13] = 0x3883c014; - data[14] = 0xb1840000; - data[15] = 0x7c1013a6; - data[16] = 0x20be000f; - data[17] = 0xca50010; - data[18] = 0x54a6103a; - data[19] = 0x7ce23214; - data[20] = 0x83870030; - data[21] = 0x57c8f801; - data[22] = 0x41820040; - data[23] = 0x387c0000; - data[24] = 0x8123fffc; - data[25] = 0x8009fff0; - data[26] = 0x7c0903a6; - data[27] = 0x8049fff4; - data[28] = 0x4e800421; - data[29] = 0x80410014; - data[30] = 0x39400001; - data[31] = 0x7d4af030; - data[32] = 0x3d600030; - data[33] = 0x398bc010; - data[34] = 0xb14c0000; - data[35] = 0x3bc00000; - data[36] = 0x4280009c; - data[37] = 0x42800094; - data[38] = 0xe9c0000; - data[39] = 0x807c0000; - data[40] = 0xa3630000; - data[41] = 0xe9c0000; - data[42] = 0x809c0004; - data[43] = 0x7c8520f8; - data[44] = 0x5f652801; - data[45] = 0x41820048; - data[46] = 0xe9c0000; - data[47] = 0x80dc0008; - data[48] = 0xa3660000; - data[49] = 0xe9c0000; - data[50] = 0x80fc000c; - data[51] = 0x7ce838f8; - data[52] = 0x5f684001; - data[53] = 0x41820028; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421ffa0; - data[92] = 0x7c0802a6; - data[93] = 0x9001005c; - data[94] = 0xbf610048; - data[95] = 0x3be10038; - data[96] = 0x90410014; - data[97] = 0x3b800000; - data[98] = 0x3ce00030; - data[99] = 0x3907c010; - data[100] = 0xa3a80000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x400; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x387c0000; - data[1] = 0x8123fffc; - data[2] = 0x8009fff0; - data[3] = 0x7c0903a6; - data[4] = 0x8049fff4; - data[5] = 0x4e800421; - data[6] = 0x80410014; - data[7] = 0x3bc00000; - data[8] = 0x42800034; - data[9] = 0xe9c0000; - data[10] = 0x815c0010; - data[11] = 0x2c8a0000; - data[12] = 0x41860010; - data[13] = 0xe9c0000; - data[14] = 0x839c0010; - data[15] = 0x42800014; - data[16] = 0x81620008; - data[17] = 0x318b0001; - data[18] = 0x91820008; - data[19] = 0x42800008; - data[20] = 0x4280ff2c; - data[21] = 0x2f1e0000; - data[22] = 0x409afed4; - data[23] = 0x383fffc8; - data[24] = 0xbb610048; - data[25] = 0x8001005c; - data[26] = 0x7c0803a6; - data[27] = 0x38210060; - data[28] = 0x4e800020; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421ff28; - data[65] = 0x900100bc; - data[66] = 0x7c1a02a6; - data[67] = 0x900100c0; - data[68] = 0x7c1b02a6; - data[69] = 0x900100c4; - data[70] = 0x7c1113a6; - data[71] = 0x7c0802a6; - data[72] = 0x900100cc; - data[73] = 0x7c000026; - data[74] = 0x900100d0; - data[75] = 0x7c0902a6; - data[76] = 0x900100d4; - data[77] = 0xbc410044; - data[78] = 0x3be10038; - data[79] = 0x3c400040; - data[80] = 0x3842ab70; - data[81] = 0x90410014; - data[82] = 0x80620004; - data[83] = 0x30830001; - data[84] = 0x90820004; - data[85] = 0x3ca00030; - data[86] = 0x38c5c014; - data[87] = 0xa3c60000; - data[88] = 0x4bfffda1; - data[89] = 0x7c1113a6; - data[90] = 0x3ce00030; - data[91] = 0x3907c014; - data[92] = 0xb3c80000; - data[93] = 0x383fffc8; - data[94] = 0xb8410044; - data[95] = 0x800100d4; - data[96] = 0x7c0903a6; - data[97] = 0x800100d0; - data[98] = 0x7c0ff120; - data[99] = 0x800100cc; - data[100] = 0x7c0803a6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x800100c4; - data[1] = 0x7c1b03a6; - data[2] = 0x800100c0; - data[3] = 0x7c1a03a6; - data[4] = 0x800100bc; - data[5] = 0x382100d8; - data[6] = 0x4c000064; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421ff34; - data[28] = 0x900100b0; - data[29] = 0x7c1a02a6; - data[30] = 0x900100b4; - data[31] = 0x7c1b02a6; - data[32] = 0x900100b8; - data[33] = 0x7c1113a6; - data[34] = 0x7c0802a6; - data[35] = 0x900100c0; - data[36] = 0x7c000026; - data[37] = 0x900100c4; - data[38] = 0x7c0902a6; - data[39] = 0x900100c8; - data[40] = 0xbc410038; - data[41] = 0x3be10038; - data[42] = 0x3c400040; - data[43] = 0x3842ab70; - data[44] = 0x90410014; - data[45] = 0x8122000c; - data[46] = 0x31490001; - data[47] = 0x9142000c; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4bfff9d1; - data[51] = 0x4280fff4; - data[52] = 0x383fffc8; - data[53] = 0xb8410038; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421ff34; - data[92] = 0x900100b0; - data[93] = 0x7c1a02a6; - data[94] = 0x900100b4; - data[95] = 0x7c1b02a6; - data[96] = 0x900100b8; - data[97] = 0x7c1113a6; - data[98] = 0x7c0802a6; - data[99] = 0x900100c0; - data[100] = 0x7c000026; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x900100c4; - data[1] = 0x7c0902a6; - data[2] = 0x900100c8; - data[3] = 0xbc410038; - data[4] = 0x3be10038; - data[5] = 0x3c400040; - data[6] = 0x3842ab70; - data[7] = 0x90410014; - data[8] = 0x81620010; - data[9] = 0x318b0001; - data[10] = 0x91820010; - data[11] = 0x38600010; - data[12] = 0x38800010; - data[13] = 0x4bfff8d1; - data[14] = 0x4280fff4; - data[15] = 0x383fffc8; - data[16] = 0xb8410038; - data[17] = 0x800100c8; - data[18] = 0x7c0903a6; - data[19] = 0x800100c4; - data[20] = 0x7c0ff120; - data[21] = 0x800100c0; - data[22] = 0x7c0803a6; - data[23] = 0x800100b8; - data[24] = 0x7c1b03a6; - data[25] = 0x800100b4; - data[26] = 0x7c1a03a6; - data[27] = 0x800100b0; - data[28] = 0x382100cc; - data[29] = 0x4c000064; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x9421ff34; - data[92] = 0x900100b0; - data[93] = 0x7c1a02a6; - data[94] = 0x900100b4; - data[95] = 0x7c1b02a6; - data[96] = 0x900100b8; - data[97] = 0x7c1113a6; - data[98] = 0x7c0802a6; - data[99] = 0x900100c0; - data[100] = 0x7c000026; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x800; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ff34; - data[1] = 0x900100b0; - data[2] = 0x7c1a02a6; - data[3] = 0x900100b4; - data[4] = 0x7c1b02a6; - data[5] = 0x900100b8; - data[6] = 0x7c1113a6; - data[7] = 0x7c0802a6; - data[8] = 0x900100c0; - data[9] = 0x7c000026; - data[10] = 0x900100c4; - data[11] = 0x7c0902a6; - data[12] = 0x900100c8; - data[13] = 0xbc410038; - data[14] = 0x3be10038; - data[15] = 0x3c400040; - data[16] = 0x3842ab70; - data[17] = 0x90410014; - data[18] = 0x80620014; - data[19] = 0x30830001; - data[20] = 0x90820014; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4bfff7d1; - data[24] = 0x4280fff4; - data[25] = 0x383fffc8; - data[26] = 0xb8410038; - data[27] = 0x800100c8; - data[28] = 0x7c0903a6; - data[29] = 0x800100c4; - data[30] = 0x7c0ff120; - data[31] = 0x800100c0; - data[32] = 0x7c0803a6; - data[33] = 0x800100b8; - data[34] = 0x7c1b03a6; - data[35] = 0x800100b4; - data[36] = 0x7c1a03a6; - data[37] = 0x800100b0; - data[38] = 0x382100cc; - data[39] = 0x4c000064; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421ff28; - data[65] = 0x900100bc; - data[66] = 0x7c1a02a6; - data[67] = 0x900100c0; - data[68] = 0x7c1b02a6; - data[69] = 0x900100c4; - data[70] = 0x7c1113a6; - data[71] = 0x7c0802a6; - data[72] = 0x900100cc; - data[73] = 0x7c000026; - data[74] = 0x900100d0; - data[75] = 0x7c0902a6; - data[76] = 0x900100d4; - data[77] = 0xbc410044; - data[78] = 0x3be10038; - data[79] = 0x3c400040; - data[80] = 0x3842ab70; - data[81] = 0x80a20018; - data[82] = 0x30c50001; - data[83] = 0x90c20018; - data[84] = 0x383fffc8; - data[85] = 0xb8410044; - data[86] = 0x800100d4; - data[87] = 0x7c0903a6; - data[88] = 0x800100d0; - data[89] = 0x7c0ff120; - data[90] = 0x800100cc; - data[91] = 0x7c0803a6; - data[92] = 0x800100c4; - data[93] = 0x7c1b03a6; - data[94] = 0x800100c0; - data[95] = 0x7c1a03a6; - data[96] = 0x800100bc; - data[97] = 0x382100d8; - data[98] = 0x4c000064; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0xc00; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ff34; - data[1] = 0x900100b0; - data[2] = 0x7c1a02a6; - data[3] = 0x900100b4; - data[4] = 0x7c1b02a6; - data[5] = 0x900100b8; - data[6] = 0x7c1113a6; - data[7] = 0x7c0802a6; - data[8] = 0x900100c0; - data[9] = 0x7c000026; - data[10] = 0x900100c4; - data[11] = 0x7c0902a6; - data[12] = 0x900100c8; - data[13] = 0xbc410038; - data[14] = 0x3be10038; - data[15] = 0x3c400040; - data[16] = 0x3842ab70; - data[17] = 0x90410014; - data[18] = 0x80e2001c; - data[19] = 0x31070001; - data[20] = 0x9102001c; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4bfff3d1; - data[24] = 0x4280fff4; - data[25] = 0x383fffc8; - data[26] = 0xb8410038; - data[27] = 0x800100c8; - data[28] = 0x7c0903a6; - data[29] = 0x800100c4; - data[30] = 0x7c0ff120; - data[31] = 0x800100c0; - data[32] = 0x7c0803a6; - data[33] = 0x800100b8; - data[34] = 0x7c1b03a6; - data[35] = 0x800100b4; - data[36] = 0x7c1a03a6; - data[37] = 0x800100b0; - data[38] = 0x382100cc; - data[39] = 0x4c000064; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x9421ff34; - data[65] = 0x900100b0; - data[66] = 0x7c1a02a6; - data[67] = 0x900100b4; - data[68] = 0x7c1b02a6; - data[69] = 0x900100b8; - data[70] = 0x7c1113a6; - data[71] = 0x7c0802a6; - data[72] = 0x900100c0; - data[73] = 0x7c000026; - data[74] = 0x900100c4; - data[75] = 0x7c0902a6; - data[76] = 0x900100c8; - data[77] = 0xbc410038; - data[78] = 0x3be10038; - data[79] = 0x3c400040; - data[80] = 0x3842ab70; - data[81] = 0x90410014; - data[82] = 0x81220020; - data[83] = 0x31490001; - data[84] = 0x91420020; - data[85] = 0x38600010; - data[86] = 0x38800010; - data[87] = 0x4bfff2d1; - data[88] = 0x4280fff4; - data[89] = 0x383fffc8; - data[90] = 0xb8410038; - data[91] = 0x800100c8; - data[92] = 0x7c0903a6; - data[93] = 0x800100c4; - data[94] = 0x7c0ff120; - data[95] = 0x800100c0; - data[96] = 0x7c0803a6; - data[97] = 0x800100b8; - data[98] = 0x7c1b03a6; - data[99] = 0x800100b4; - data[100] = 0x7c1a03a6; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x800100b0; - data[1] = 0x382100cc; - data[2] = 0x4c000064; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x9421ff34; - data[28] = 0x900100b0; - data[29] = 0x7c1a02a6; - data[30] = 0x900100b4; - data[31] = 0x7c1b02a6; - data[32] = 0x900100b8; - data[33] = 0x7c1113a6; - data[34] = 0x7c0802a6; - data[35] = 0x900100c0; - data[36] = 0x7c000026; - data[37] = 0x900100c4; - data[38] = 0x7c0902a6; - data[39] = 0x900100c8; - data[40] = 0xbc410038; - data[41] = 0x3be10038; - data[42] = 0x3c400040; - data[43] = 0x3842ab70; - data[44] = 0x90410014; - data[45] = 0x81620024; - data[46] = 0x318b0001; - data[47] = 0x91820024; - data[48] = 0x38600010; - data[49] = 0x38800010; - data[50] = 0x4bfff1d1; - data[51] = 0x4280fff4; - data[52] = 0x383fffc8; - data[53] = 0xb8410038; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x800100c8; - data[55] = 0x7c0903a6; - data[56] = 0x800100c4; - data[57] = 0x7c0ff120; - data[58] = 0x800100c0; - data[59] = 0x7c0803a6; - data[60] = 0x800100b8; - data[61] = 0x7c1b03a6; - data[62] = 0x800100b4; - data[63] = 0x7c1a03a6; - data[64] = 0x800100b0; - data[65] = 0x382100cc; - data[66] = 0x4c000064; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1000; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ff34; - data[1] = 0x900100b0; - data[2] = 0x7c1a02a6; - data[3] = 0x900100b4; - data[4] = 0x7c1b02a6; - data[5] = 0x900100b8; - data[6] = 0x7c1113a6; - data[7] = 0x7c0802a6; - data[8] = 0x900100c0; - data[9] = 0x7c000026; - data[10] = 0x900100c4; - data[11] = 0x7c0902a6; - data[12] = 0x900100c8; - data[13] = 0xbc410038; - data[14] = 0x3be10038; - data[15] = 0x3c400040; - data[16] = 0x3842ab70; - data[17] = 0x90410014; - data[18] = 0x80620028; - data[19] = 0x30830001; - data[20] = 0x90820028; - data[21] = 0x38600010; - data[22] = 0x38800010; - data[23] = 0x4bffefd1; - data[24] = 0x4280fff4; - data[25] = 0x383fffc8; - data[26] = 0xb8410038; - data[27] = 0x800100c8; - data[28] = 0x7c0903a6; - data[29] = 0x800100c4; - data[30] = 0x7c0ff120; - data[31] = 0x800100c0; - data[32] = 0x7c0803a6; - data[33] = 0x800100b8; - data[34] = 0x7c1b03a6; - data[35] = 0x800100b4; - data[36] = 0x7c1a03a6; - data[37] = 0x800100b0; - data[38] = 0x382100cc; - data[39] = 0x4c000064; - data[40] = 0x9421ffb0; - data[41] = 0x7c0802a6; - data[42] = 0x9001004c; - data[43] = 0xbfa10040; - data[44] = 0x3be10038; - data[45] = 0x90410014; - data[46] = 0x3ba00000; - data[47] = 0x8062fffc; - data[48] = 0x8042fff4; - data[49] = 0x483f9405; - data[50] = 0x80410014; - data[51] = 0x3ba30000; - data[52] = 0x3bc00000; - data[53] = 0x2f9e000f; - data[54] = 0x419d001c; - data[55] = 0xcbe0010; - data[56] = 0x57c5103a; - data[57] = 0x7cc22a14; - data[58] = 0x93a60030; - data[59] = 0x33de0001; - data[60] = 0x4280ffe4; - data[61] = 0x383fffc8; - data[62] = 0xbba10040; - data[63] = 0x8001004c; - data[64] = 0x7c0803a6; - data[65] = 0x38210050; - data[66] = 0x4e800020; - data[67] = 0x9421ffb0; - data[68] = 0x7c0802a6; - data[69] = 0x9001004c; - data[70] = 0xbfc10044; - data[71] = 0x3be10038; - data[72] = 0x90410014; - data[73] = 0x3bc00000; - data[74] = 0x7fd603a6; - data[75] = 0x383fffc8; - data[76] = 0xbbc10044; - data[77] = 0x8001004c; - data[78] = 0x7c0803a6; - data[79] = 0x38210050; - data[80] = 0x4e800020; - data[81] = 0x9421ffb8; - data[82] = 0xbfa1003c; - data[83] = 0x3be10038; - data[84] = 0x3bc30000; - data[85] = 0x3ba40000; - data[86] = 0x57a7083c; - data[87] = 0xca70010; - data[88] = 0x54e8103a; - data[89] = 0x7d224214; - data[90] = 0x93c90030; - data[91] = 0x383fffc8; - data[92] = 0xbba1003c; - data[93] = 0x38210048; - data[94] = 0x4e800020; - data[95] = 0x9421ffb8; - data[96] = 0xbfa1003c; - data[97] = 0x3be10038; - data[98] = 0x3bc30000; - data[99] = 0x3ba40000; - data[100] = 0xe9e0000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x57aa083c; - data[1] = 0x316a0001; - data[2] = 0xcab0010; - data[3] = 0x556c103a; - data[4] = 0x7c626214; - data[5] = 0x80830030; - data[6] = 0x909e0010; - data[7] = 0x57a5083c; - data[8] = 0x30c50001; - data[9] = 0xca60010; - data[10] = 0x54c7103a; - data[11] = 0x7d023a14; - data[12] = 0x93c80030; - data[13] = 0x383fffc8; - data[14] = 0xbba1003c; - data[15] = 0x38210048; - data[16] = 0x4e800020; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1400; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1800; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x1c00; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x0; - data[31] = 0x0; - data[32] = 0x0; - data[33] = 0x0; - data[34] = 0x0; - data[35] = 0x0; - data[36] = 0x0; - data[37] = 0x0; - data[38] = 0x0; - data[39] = 0x0; - data[40] = 0x0; - data[41] = 0x0; - data[42] = 0x0; - data[43] = 0x0; - data[44] = 0x0; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x0; - data[1] = 0x0; - data[2] = 0x0; - data[3] = 0x0; - data[4] = 0x0; - data[5] = 0x0; - data[6] = 0x0; - data[7] = 0x0; - data[8] = 0x0; - data[9] = 0x0; - data[10] = 0x0; - data[11] = 0x0; - data[12] = 0x0; - data[13] = 0x0; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x0; - data[26] = 0x0; - data[27] = 0x0; - data[28] = 0x0; - data[29] = 0x0; - data[30] = 0x9421ffc0; - data[31] = 0xbfe1003c; - data[32] = 0x3be10038; - data[33] = 0x383fffc8; - data[34] = 0xbbe1003c; - data[35] = 0x38210040; - data[36] = 0x4e800020; - data[37] = 0x9421ffc0; - data[38] = 0x7c0802a6; - data[39] = 0x9001003c; - data[40] = 0xbfe10038; - data[41] = 0x3be10038; - data[42] = 0x90410014; - data[43] = 0x4bfff0cd; - data[44] = 0x383fffc8; - data[45] = 0xbbe10038; - data[46] = 0x8001003c; - data[47] = 0x7c0803a6; - data[48] = 0x38210040; - data[49] = 0x4e800020; - data[50] = 0x50c5598e; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0x0; - data[54] = 0x0; - data[55] = 0x0; - data[56] = 0x0; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x0; - data[63] = 0x0; - data[64] = 0x0; - data[65] = 0x0; - data[66] = 0x0; - data[67] = 0x0; - data[68] = 0x0; - data[69] = 0x0; - data[70] = 0x0; - data[71] = 0x0; - data[72] = 0x0; - data[73] = 0x0; - data[74] = 0x0; - data[75] = 0x0; - data[76] = 0x0; - data[77] = 0x0; - data[78] = 0x0; - data[79] = 0x0; - data[80] = 0x0; - data[81] = 0x0; - data[82] = 0x0; - data[83] = 0x0; - data[84] = 0x0; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0x0; - data[93] = 0x0; - data[94] = 0x0; - data[95] = 0x0; - data[96] = 0x0; - data[97] = 0x0; - data[98] = 0x0; - data[99] = 0x0; - data[100] = 0x0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802000; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x26; - data[1] = 0x80326c; - data[2] = 0x803304; - data[3] = 0x803268; - data[4] = 0x803270; - data[5] = 0x803274; - data[6] = 0x803278; - data[7] = 0x80327c; - data[8] = 0x803280; - data[9] = 0x803284; - data[10] = 0x803288; - data[11] = 0x80328c; - data[12] = 0x803290; - data[13] = 0x803294; - data[14] = 0x803298; - data[15] = 0x80329c; - data[16] = 0x8032a0; - data[17] = 0x8032a4; - data[18] = 0x8032a8; - data[19] = 0x8032ac; - data[20] = 0x8032b0; - data[21] = 0x8032b4; - data[22] = 0x8032b8; - data[23] = 0x8032bc; - data[24] = 0x8032c0; - data[25] = 0x8032c4; - data[26] = 0x8032c8; - data[27] = 0x8032cc; - data[28] = 0x8032d0; - data[29] = 0x8032d4; - data[30] = 0x8032d8; - data[31] = 0x8032dc; - data[32] = 0x8032e0; - data[33] = 0x8032e4; - data[34] = 0x8032e8; - data[35] = 0x8032ec; - data[36] = 0x8032f0; - data[37] = 0x8032f4; - data[38] = 0x8032f8; - data[39] = 0x8020d4; - data[40] = 0x802130; - data[41] = 0x8020f8; - data[42] = 0x18; - data[43] = 0x80320c; - data[44] = 0x0; - data[45] = 0x802000; - data[46] = 0x27c; - data[47] = 0x80227c; - data[48] = 0xfc8; - data[49] = 0x803244; - data[50] = 0x18; - data[51] = 0x80325c; - data[52] = 0xb0; - data[53] = 0xa; - data[54] = 0x546f7070; - data[55] = 0x63546173; - data[56] = 0x6b730000; - data[57] = 0x0; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x3fa720; - data[63] = 0x3fa6e0; - data[64] = 0x3fa720; - data[65] = 0x802220; - data[66] = 0x8021a4; - data[67] = 0x802130; - data[68] = 0x8022f0; - data[69] = 0x80325c; - data[70] = 0x802370; - data[71] = 0x80325c; - data[72] = 0x8022b4; - data[73] = 0x80325c; - data[74] = 0xffffffff; - data[75] = 0xffffffff; - data[76] = 0x24; - data[77] = 0x0; - data[78] = 0x3; - data[79] = 0xfffffffc; - data[80] = 0x802000; - data[81] = 0x8020d4; - data[82] = 0x802174; - data[83] = 0x8021a4; - data[84] = 0x802130; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0xffffffc0; - data[93] = 0x8; - data[94] = 0x5461736b; - data[95] = 0x44657363; - data[96] = 0x0; - data[97] = 0x8022f0; - data[98] = 0x80325c; - data[99] = 0x802370; - data[100] = 0x80325c; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x8023f4; - data[1] = 0x80325c; - data[2] = 0x0; - data[3] = 0xfffffffc; - data[4] = 0x24; - data[5] = 0x1; - data[6] = 0x3; - data[7] = 0xfffffff8; - data[8] = 0x802000; - data[9] = 0x8020d4; - data[10] = 0x8021e8; - data[11] = 0x802220; - data[12] = 0x802130; - data[13] = 0x8021a4; - data[14] = 0x0; - data[15] = 0x0; - data[16] = 0x0; - data[17] = 0x0; - data[18] = 0x0; - data[19] = 0x0; - data[20] = 0xffffffc0; - data[21] = 0xd; - data[22] = 0x4572726f; - data[23] = 0x72546173; - data[24] = 0x6b446573; - data[25] = 0x63000000; - data[26] = 0x0; - data[27] = 0x8022f0; - data[28] = 0x80325c; - data[29] = 0x802370; - data[30] = 0x80325c; - data[31] = 0x8031ec; - data[32] = 0x80325c; - data[33] = 0x0; - data[34] = 0xfffffffc; - data[35] = 0x24; - data[36] = 0x1; - data[37] = 0x3; - data[38] = 0xfffffff4; - data[39] = 0x802000; - data[40] = 0x8020d4; - data[41] = 0x802264; - data[42] = 0x0; - data[43] = 0x802130; - data[44] = 0x802220; - data[45] = 0x0; - data[46] = 0x0; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0xffffffc0; - data[52] = 0xa; - data[53] = 0x47435461; - data[54] = 0x736b4465; - data[55] = 0x73630000; - data[56] = 0x0; - data[57] = 0x7145256d; - data[58] = 0x0; - data[59] = 0x0; - data[60] = 0x0; - data[61] = 0x0; - data[62] = 0x3fa720; - data[63] = 0x3fa6e0; - data[64] = 0x3fa720; - data[65] = 0x802220; - data[66] = 0x8021a4; - data[67] = 0x802130; - data[68] = 0x8022f0; - data[69] = 0x80325c; - data[70] = 0x802370; - data[71] = 0x80325c; - data[72] = 0x8022b4; - data[73] = 0x80325c; - data[74] = 0xffffffff; - data[75] = 0xffffffff; - data[76] = 0x24; - data[77] = 0x0; - data[78] = 0x3; - data[79] = 0xfffffffc; - data[80] = 0x802000; - data[81] = 0x8020d4; - data[82] = 0x802174; - data[83] = 0x8021a4; - data[84] = 0x802130; - data[85] = 0x0; - data[86] = 0x0; - data[87] = 0x0; - data[88] = 0x0; - data[89] = 0x0; - data[90] = 0x0; - data[91] = 0x0; - data[92] = 0xffffffc0; - data[93] = 0x8; - data[94] = 0x5461736b; - data[95] = 0x44657363; - data[96] = 0x0; - data[97] = 0x8022f0; - data[98] = 0x80325c; - data[99] = 0x802370; - data[100] = 0x80325c; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80227c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ffc0; - data[1] = 0xbfc10038; - data[2] = 0x3be10038; - data[3] = 0x3bc30000; - data[4] = 0xa8620002; - data[5] = 0x2c830000; - data[6] = 0x40860008; - data[7] = 0xb3c20002; - data[8] = 0x38800000; - data[9] = 0x98820000; - data[10] = 0x383fffc8; - data[11] = 0xbbc10038; - data[12] = 0x38210040; - data[13] = 0x4e800020; - data[14] = 0x9421ffb8; - data[15] = 0x7c0802a6; - data[16] = 0x90010044; - data[17] = 0xbfc1003c; - data[18] = 0x3be10038; - data[19] = 0x90410014; - data[20] = 0x3bc30000; - data[21] = 0x38600063; - data[22] = 0x4bffffa9; - data[23] = 0x383fffc8; - data[24] = 0xbbc1003c; - data[25] = 0x80010044; - data[26] = 0x7c0803a6; - data[27] = 0x38210048; - data[28] = 0x4e800020; - data[29] = 0x9421ffb8; - data[30] = 0xbfa1003c; - data[31] = 0x3be10038; - data[32] = 0x3bc30000; - data[33] = 0x3ba40000; - data[34] = 0xe9e0000; - data[35] = 0xe9d0000; - data[36] = 0x80be0018; - data[37] = 0x80dd0018; - data[38] = 0x7f053000; - data[39] = 0x41980034; - data[40] = 0xe9e0000; - data[41] = 0xe9d0000; - data[42] = 0x80fe0018; - data[43] = 0x811d0018; - data[44] = 0x7f874000; - data[45] = 0x409e0024; - data[46] = 0xe9e0000; - data[47] = 0xe9d0000; - data[48] = 0xa93e0020; - data[49] = 0xa95d0020; - data[50] = 0x7c895000; - data[51] = 0x4084000c; - data[52] = 0x38600001; - data[53] = 0x42800008; - data[54] = 0x38600000; - data[55] = 0x42800008; - data[56] = 0x7fe00008; - data[57] = 0x383fffc8; - data[58] = 0xbba1003c; - data[59] = 0x38210048; - data[60] = 0x4e800020; - data[61] = 0x9421ffc0; - data[62] = 0xbfc10038; - data[63] = 0x3be10038; - data[64] = 0x3bc30000; - data[65] = 0xe9e0000; - data[66] = 0x817e0000; - data[67] = 0x2f0b0000; - data[68] = 0x4198004c; - data[69] = 0xe9e0000; - data[70] = 0x819e0000; - data[71] = 0x3c608000; - data[72] = 0x3883fc17; - data[73] = 0x7f8c2000; - data[74] = 0x419d0034; - data[75] = 0xe9e0000; - data[76] = 0x80be0004; - data[77] = 0x2c850000; - data[78] = 0x41840024; - data[79] = 0xe9e0000; - data[80] = 0x80de0004; - data[81] = 0x3ce08000; - data[82] = 0x3907fc17; - data[83] = 0x7f064000; - data[84] = 0x4199000c; - data[85] = 0x38600001; - data[86] = 0x42800008; - data[87] = 0x38600000; - data[88] = 0x42800008; - data[89] = 0x7fe00008; - data[90] = 0x383fffc8; - data[91] = 0xbbc10038; - data[92] = 0x38210040; - data[93] = 0x4e800020; - data[94] = 0x9421ffb8; - data[95] = 0x7c0802a6; - data[96] = 0x90010044; - data[97] = 0xbfc1003c; - data[98] = 0x3be10038; - data[99] = 0x90410014; - data[100] = 0x3bc30000; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x38600062; - data[1] = 0x4bfffe69; - data[2] = 0x383fffc8; - data[3] = 0xbbc1003c; - data[4] = 0x80010044; - data[5] = 0x7c0803a6; - data[6] = 0x38210048; - data[7] = 0x4e800020; - data[8] = 0x9421ffb0; - data[9] = 0x7c0802a6; - data[10] = 0x9001004c; - data[11] = 0xbfa10040; - data[12] = 0x3be10038; - data[13] = 0x90410014; - data[14] = 0x3bc30000; - data[15] = 0x89220000; - data[16] = 0x2f890000; - data[17] = 0x419e0020; - data[18] = 0xa9420004; - data[19] = 0xa9620006; - data[20] = 0x7d8a5a14; - data[21] = 0x2c8c0020; - data[22] = 0x4084000c; - data[23] = 0x38600001; - data[24] = 0x42800008; - data[25] = 0x38600000; - data[26] = 0x98620000; - data[27] = 0x88820000; - data[28] = 0x2f040000; - data[29] = 0x419a0088; - data[30] = 0xa8a20004; - data[31] = 0x30c50001; - data[32] = 0xb0c20004; - data[33] = 0xaba20004; - data[34] = 0x387e0000; - data[35] = 0x7fa70e70; - data[36] = 0xca70022; - data[37] = 0x54e8103a; - data[38] = 0x7d224214; - data[39] = 0x80890018; - data[40] = 0x8143fffc; - data[41] = 0x800affe0; - data[42] = 0x7c0903a6; - data[43] = 0x804affe4; - data[44] = 0x4e800421; - data[45] = 0x80410014; - data[46] = 0x2f830000; - data[47] = 0x419e0030; - data[48] = 0xcbd0022; - data[49] = 0x57ab103a; - data[50] = 0x7d825a14; - data[51] = 0x7fa30e70; - data[52] = 0xca30022; - data[53] = 0x5464103a; - data[54] = 0x7ca22214; - data[55] = 0x80c50018; - data[56] = 0x90cc0018; - data[57] = 0x7fbd0e70; - data[58] = 0x4280ffa0; - data[59] = 0xcbd0022; - data[60] = 0x57a7103a; - data[61] = 0x7d023a14; - data[62] = 0x93c80018; - data[63] = 0x383fffc8; - data[64] = 0xbba10040; - data[65] = 0x8001004c; - data[66] = 0x7c0803a6; - data[67] = 0x38210050; - data[68] = 0x4e800020; - data[69] = 0x9421ffa8; - data[70] = 0x7c0802a6; - data[71] = 0x90010054; - data[72] = 0xbf810044; - data[73] = 0x3be10038; - data[74] = 0x90410014; - data[75] = 0x3bc00000; - data[76] = 0xa9220004; - data[77] = 0x2c890001; - data[78] = 0x40850118; - data[79] = 0xa9420004; - data[80] = 0xcaa0022; - data[81] = 0x554b103a; - data[82] = 0x7d825a14; - data[83] = 0x83cc0018; - data[84] = 0xa8620004; - data[85] = 0xca30022; - data[86] = 0x5464103a; - data[87] = 0x7ca22214; - data[88] = 0x80c2000c; - data[89] = 0x90c50018; - data[90] = 0x3ba00001; - data[91] = 0xa8e20004; - data[92] = 0x3107ffff; - data[93] = 0xb1020004; - data[94] = 0x57bc083c; - data[95] = 0xa9220004; - data[96] = 0x7f1c4800; - data[97] = 0x40990008; - data[98] = 0x428000b4; - data[99] = 0xcbc0022; - data[100] = 0x578a103a; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x7d625214; - data[1] = 0x806b0018; - data[2] = 0x319c0001; - data[3] = 0xcac0022; - data[4] = 0x5584103a; - data[5] = 0x7ca22214; - data[6] = 0x80850018; - data[7] = 0x80c3fffc; - data[8] = 0x8006ffe0; - data[9] = 0x7c0903a6; - data[10] = 0x8046ffe4; - data[11] = 0x4e800421; - data[12] = 0x80410014; - data[13] = 0x20e30001; - data[14] = 0x2f870000; - data[15] = 0x419e0008; - data[16] = 0x339c0001; - data[17] = 0x387e0000; - data[18] = 0xcbc0022; - data[19] = 0x5788103a; - data[20] = 0x7d224214; - data[21] = 0x80890018; - data[22] = 0x8143fffc; - data[23] = 0x800affe0; - data[24] = 0x7c0903a6; - data[25] = 0x804affe4; - data[26] = 0x4e800421; - data[27] = 0x80410014; - data[28] = 0x2c830000; - data[29] = 0x4186000c; - data[30] = 0x42800030; - data[31] = 0x42800028; - data[32] = 0xcbd0022; - data[33] = 0x57ab103a; - data[34] = 0x7d825a14; - data[35] = 0xcbc0022; - data[36] = 0x5783103a; - data[37] = 0x7c821a14; - data[38] = 0x80a40018; - data[39] = 0x90ac0018; - data[40] = 0x3bbc0000; - data[41] = 0x4280ff40; - data[42] = 0xcbd0022; - data[43] = 0x57a6103a; - data[44] = 0x7ce23214; - data[45] = 0x93c70018; - data[46] = 0x42800020; - data[47] = 0xa9020004; - data[48] = 0x2f080001; - data[49] = 0x409a0014; - data[50] = 0x8122000c; - data[51] = 0x9122001c; - data[52] = 0x39400000; - data[53] = 0xb1420004; - data[54] = 0x7ca22214; - data[55] = 0x80c50018; - data[56] = 0x90cc0018; - data[57] = 0x7fbd0e70; - data[58] = 0x4280ffa0; - data[59] = 0xcbd0022; - data[60] = 0x57a7103a; - data[61] = 0x7d023a14; - data[62] = 0x93c80018; - data[63] = 0x383fffc8; - data[64] = 0xbba10040; - data[65] = 0x8001004c; - data[66] = 0x7c0803a6; - data[67] = 0x38210050; - data[68] = 0x4e800020; - data[69] = 0x9421ffa8; - data[70] = 0x7c0802a6; - data[71] = 0x90010054; - data[72] = 0xbf810044; - data[73] = 0x3be10038; - data[74] = 0x90410014; - data[75] = 0x3bc00000; - data[76] = 0xa9220004; - data[77] = 0x2c890001; - data[78] = 0x40850118; - data[79] = 0xa9420004; - data[80] = 0xcaa0022; - data[81] = 0x554b103a; - data[82] = 0x7d825a14; - data[83] = 0x83cc0018; - data[84] = 0xa8620004; - data[85] = 0xca30022; - data[86] = 0x5464103a; - data[87] = 0x7ca22214; - data[88] = 0x80c2000c; - data[89] = 0x90c50018; - data[90] = 0x3ba00001; - data[91] = 0xa8e20004; - data[92] = 0x3107ffff; - data[93] = 0xb1020004; - data[94] = 0x57bc083c; - data[95] = 0xa9220004; - data[96] = 0x7f1c4800; - data[97] = 0x40990008; - data[98] = 0x428000b4; - data[99] = 0xcbc0022; - data[100] = 0x578a103a; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80267c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x383fffc8; - data[1] = 0xbb810044; - data[2] = 0x80010054; - data[3] = 0x7c0803a6; - data[4] = 0x38210058; - data[5] = 0x4e800020; - data[6] = 0x9421ffa8; - data[7] = 0x7c0802a6; - data[8] = 0x90010054; - data[9] = 0xbf810044; - data[10] = 0x3be10038; - data[11] = 0x90410014; - data[12] = 0x3bc00000; - data[13] = 0xa9620004; - data[14] = 0x2f8b0001; - data[15] = 0x409d00e0; - data[16] = 0x83c2001c; - data[17] = 0x3ba00001; - data[18] = 0x57bc083c; - data[19] = 0xa9820004; - data[20] = 0x7c9c6000; - data[21] = 0x40850008; - data[22] = 0x428000b4; - data[23] = 0xcbc0022; - data[24] = 0x5783103a; - data[25] = 0x7c821a14; - data[26] = 0x80640018; - data[27] = 0x30bc0001; - data[28] = 0xca50022; - data[29] = 0x54a6103a; - data[30] = 0x7ce23214; - data[31] = 0x80870018; - data[32] = 0x8103fffc; - data[33] = 0x8008ffe0; - data[34] = 0x7c0903a6; - data[35] = 0x8048ffe4; - data[36] = 0x4e800421; - data[37] = 0x80410014; - data[38] = 0x21230001; - data[39] = 0x2f090000; - data[40] = 0x419a0008; - data[41] = 0x339c0001; - data[42] = 0x387e0000; - data[43] = 0xcbc0022; - data[44] = 0x578a103a; - data[45] = 0x7d625214; - data[46] = 0x808b0018; - data[47] = 0x8183fffc; - data[48] = 0x800cffe0; - data[49] = 0x7c0903a6; - data[50] = 0x804cffe4; - data[51] = 0x4e800421; - data[52] = 0x80410014; - data[53] = 0x2f830000; - data[54] = 0x419e000c; - data[55] = 0x42800030; - data[56] = 0x42800028; - data[57] = 0xcbd0022; - data[58] = 0x57a3103a; - data[59] = 0x7c821a14; - data[60] = 0xcbc0022; - data[61] = 0x5785103a; - data[62] = 0x7cc22a14; - data[63] = 0x80e60018; - data[64] = 0x90e40018; - data[65] = 0x3bbc0000; - data[66] = 0x4280ff40; - data[67] = 0xcbd0022; - data[68] = 0x57a8103a; - data[69] = 0x7d224214; - data[70] = 0x93c90018; - data[71] = 0x383fffc8; - data[72] = 0xbb810044; - data[73] = 0x80010054; - data[74] = 0x7c0803a6; - data[75] = 0x38210058; - data[76] = 0x4e800020; - data[77] = 0x9421ff98; - data[78] = 0x7c0802a6; - data[79] = 0x90010064; - data[80] = 0xbf41004c; - data[81] = 0x3be10038; - data[82] = 0x90410014; - data[83] = 0x3bc30000; - data[84] = 0x3ba00000; - data[85] = 0xab420004; - data[86] = 0x2c9a0000; - data[87] = 0x40850024; - data[88] = 0xcba0022; - data[89] = 0x574a103a; - data[90] = 0x7d625214; - data[91] = 0x818b0018; - data[92] = 0x7f0cf000; - data[93] = 0x419a000c; - data[94] = 0x335affff; - data[95] = 0x4280ffdc; - data[96] = 0x2f9a0000; - data[97] = 0x409d01b4; - data[98] = 0x2c9a0001; - data[99] = 0x4086000c; - data[100] = 0x4bfffd19; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x428001a4; - data[1] = 0xa8620004; - data[2] = 0xca30022; - data[3] = 0x5464103a; - data[4] = 0x7ca22214; - data[5] = 0x83a50018; - data[6] = 0xa8c20004; - data[7] = 0xca60022; - data[8] = 0x54c7103a; - data[9] = 0x7d023a14; - data[10] = 0x8122000c; - data[11] = 0x91280018; - data[12] = 0xa9420004; - data[13] = 0x7f1a5000; - data[14] = 0x409a0014; - data[15] = 0xa9620004; - data[16] = 0x318bffff; - data[17] = 0xb1820004; - data[18] = 0x4280015c; - data[19] = 0x2f9a0001; - data[20] = 0x409d0154; - data[21] = 0xa8620004; - data[22] = 0x3083ffff; - data[23] = 0xb0820004; - data[24] = 0x3b9a0000; - data[25] = 0x387d0000; - data[26] = 0x7f850e70; - data[27] = 0xca50022; - data[28] = 0x54a6103a; - data[29] = 0x7ce23214; - data[30] = 0x80870018; - data[31] = 0x8103fffc; - data[32] = 0x8008ffe0; - data[33] = 0x7c0903a6; - data[34] = 0x8048ffe4; - data[35] = 0x4e800421; - data[36] = 0x80410014; - data[37] = 0x2c830000; - data[38] = 0x41860030; - data[39] = 0xcbc0022; - data[40] = 0x5789103a; - data[41] = 0x7d424a14; - data[42] = 0x7f8b0e70; - data[43] = 0xcab0022; - data[44] = 0x556c103a; - data[45] = 0x7c626214; - data[46] = 0x80830018; - data[47] = 0x908a0018; - data[48] = 0x7f9c0e70; - data[49] = 0x4280ffa0; - data[50] = 0x7f1cd000; - data[51] = 0x409a00c8; - data[52] = 0x579b083c; - data[53] = 0xa8a20004; - data[54] = 0x7f9b2800; - data[55] = 0x409d0008; - data[56] = 0x428000b4; - data[57] = 0xcbb0022; - data[58] = 0x5766103a; - data[59] = 0x7ce23214; - data[60] = 0x80670018; - data[61] = 0x311b0001; - data[62] = 0xca80022; - data[63] = 0x5509103a; - data[64] = 0x7d424a14; - data[65] = 0x808a0018; - data[66] = 0x8163fffc; - data[67] = 0x800bffe0; - data[68] = 0x7c0903a6; - data[69] = 0x804bffe4; - data[70] = 0x4e800421; - data[71] = 0x80410014; - data[72] = 0x21830001; - data[73] = 0x2c8c0000; - data[74] = 0x41860008; - data[75] = 0x337b0001; - data[76] = 0x387d0000; - data[77] = 0xcbb0022; - data[78] = 0x5764103a; - data[79] = 0x7ca22214; - data[80] = 0x80850018; - data[81] = 0x80c3fffc; - data[82] = 0x8006ffe0; - data[83] = 0x7c0903a6; - data[84] = 0x8046ffe4; - data[85] = 0x4e800421; - data[86] = 0x80410014; - data[87] = 0x2f030000; - data[88] = 0x419a000c; - data[89] = 0x42800030; - data[90] = 0x42800028; - data[91] = 0xcbc0022; - data[92] = 0x5787103a; - data[93] = 0x7d023a14; - data[94] = 0xcbb0022; - data[95] = 0x5769103a; - data[96] = 0x7d424a14; - data[97] = 0x816a0018; - data[98] = 0x91680018; - data[99] = 0x3b9b0000; - data[100] = 0x4280ff40; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0xcbc0022; - data[1] = 0x578c103a; - data[2] = 0x7c626214; - data[3] = 0x93a30018; - data[4] = 0x383fffc8; - data[5] = 0xbb41004c; - data[6] = 0x80010064; - data[7] = 0x7c0803a6; - data[8] = 0x38210068; - data[9] = 0x4e800020; - data[10] = 0x9421ffb0; - data[11] = 0x7c0802a6; - data[12] = 0x9001004c; - data[13] = 0xbfa10040; - data[14] = 0x3be10038; - data[15] = 0x90410014; - data[16] = 0x3bc30000; - data[17] = 0xa8820006; - data[18] = 0x23a40022; - data[19] = 0x2f9d0022; - data[20] = 0x409c0024; - data[21] = 0xcbd0022; - data[22] = 0x57a5103a; - data[23] = 0x7cc22a14; - data[24] = 0x80e60018; - data[25] = 0x7c87f000; - data[26] = 0x4186000c; - data[27] = 0x33bd0001; - data[28] = 0x4280ffdc; - data[29] = 0x2f1d0022; - data[30] = 0x4098003c; - data[31] = 0xcbd0022; - data[32] = 0x57a8103a; - data[33] = 0x7d224214; - data[34] = 0xa9420006; - data[35] = 0x216a0022; - data[36] = 0xcab0022; - data[37] = 0x556c103a; - data[38] = 0x7c626214; - data[39] = 0x80830018; - data[40] = 0x90890018; - data[41] = 0xa8a20006; - data[42] = 0x30c5ffff; - data[43] = 0xb0c20006; - data[44] = 0x4280000c; - data[45] = 0x387e0000; - data[46] = 0x4bfffd55; - data[47] = 0xe9e0000; - data[48] = 0x38e00000; - data[49] = 0x98fe0017; - data[50] = 0x383fffc8; - data[51] = 0xbba10040; - data[52] = 0x8001004c; - data[53] = 0x7c0803a6; - data[54] = 0x7f9b2800; - data[55] = 0x409d0008; - data[56] = 0x428000b4; - data[57] = 0xcbb0022; - data[58] = 0x5766103a; - data[59] = 0x7ce23214; - data[60] = 0x80670018; - data[61] = 0x311b0001; - data[62] = 0xca80022; - data[63] = 0x5509103a; - data[64] = 0x7d424a14; - data[65] = 0x808a0018; - data[66] = 0x8163fffc; - data[67] = 0x800bffe0; - data[68] = 0x7c0903a6; - data[69] = 0x804bffe4; - data[70] = 0x4e800421; - data[71] = 0x80410014; - data[72] = 0x21830001; - data[73] = 0x2c8c0000; - data[74] = 0x41860008; - data[75] = 0x337b0001; - data[76] = 0x387d0000; - data[77] = 0xcbb0022; - data[78] = 0x5764103a; - data[79] = 0x7ca22214; - data[80] = 0x80850018; - data[81] = 0x80c3fffc; - data[82] = 0x8006ffe0; - data[83] = 0x7c0903a6; - data[84] = 0x8046ffe4; - data[85] = 0x4e800421; - data[86] = 0x80410014; - data[87] = 0x2f030000; - data[88] = 0x419a000c; - data[89] = 0x42800030; - data[90] = 0x42800028; - data[91] = 0xcbc0022; - data[92] = 0x5787103a; - data[93] = 0x7d023a14; - data[94] = 0xcbb0022; - data[95] = 0x5769103a; - data[96] = 0x7d424a14; - data[97] = 0x816a0018; - data[98] = 0x91680018; - data[99] = 0x3b9b0000; - data[100] = 0x4280ff40; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802a7c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x38210050; - data[1] = 0x4e800020; - data[2] = 0x9421ffc0; - data[3] = 0x7c0802a6; - data[4] = 0x9001003c; - data[5] = 0xbfe10038; - data[6] = 0x3be10038; - data[7] = 0x90410014; - data[8] = 0x8042ffec; - data[9] = 0x4bbf71d5; - data[10] = 0x80410014; - data[11] = 0x42800008; - data[12] = 0x7fe00008; - data[13] = 0x383fffc8; - data[14] = 0xbbe10038; - data[15] = 0x8001003c; - data[16] = 0x7c0803a6; - data[17] = 0x38210040; - data[18] = 0x4e800020; - data[19] = 0x9421ffa0; - data[20] = 0x7c0802a6; - data[21] = 0x9001005c; - data[22] = 0xbf610048; - data[23] = 0x3be10038; - data[24] = 0x90410014; - data[25] = 0x3bc00000; - data[26] = 0x8102ffec; - data[27] = 0x81280008; - data[28] = 0x912200a0; - data[29] = 0x8148000c; - data[30] = 0x914200a4; - data[31] = 0x816200a0; - data[32] = 0x2f8b0000; - data[33] = 0x419e0028; - data[34] = 0x8182ffec; - data[35] = 0x38600000; - data[36] = 0x906c0008; - data[37] = 0x906c000c; - data[38] = 0x800200a0; - data[39] = 0x7c0903a6; - data[40] = 0x804200a4; - data[41] = 0x4e800421; - data[42] = 0x80410014; - data[43] = 0x80620014; - data[44] = 0xe830000; - data[45] = 0x38630018; - data[46] = 0x80820014; - data[47] = 0xe840000; - data[48] = 0x38840020; - data[49] = 0x8042ffec; - data[50] = 0x4bbf7171; - data[51] = 0x80410014; - data[52] = 0x83c2001c; - data[53] = 0x387e0000; - data[54] = 0x80820014; - data[55] = 0x80a3fffc; - data[56] = 0x8005ffe0; - data[57] = 0x7c0903a6; - data[58] = 0x8045ffe4; - data[59] = 0x4e800421; - data[60] = 0x80410014; - data[61] = 0x2c830000; - data[62] = 0x41860214; - data[63] = 0x38c00001; - data[64] = 0xb0c2000a; - data[65] = 0xe9e0000; - data[66] = 0x80fe0008; - data[67] = 0x31070001; - data[68] = 0x911e0008; - data[69] = 0xe9e0000; - data[70] = 0x893e0015; - data[71] = 0x2f090000; - data[72] = 0x419a006c; - data[73] = 0x4bfffee5; - data[74] = 0x3ba30000; - data[75] = 0x387e0000; - data[76] = 0x8143fffc; - data[77] = 0x800afff0; - data[78] = 0x7c0903a6; - data[79] = 0x804afff4; - data[80] = 0x4e800421; - data[81] = 0x80410014; - data[82] = 0x4bfffec1; - data[83] = 0x3b830000; - data[84] = 0x7f7de010; - data[85] = 0xe9e0000; - data[86] = 0x817e000c; - data[87] = 0x7f9b5800; - data[88] = 0x409c0010; - data[89] = 0xe9e0000; - data[90] = 0x937e000c; - data[91] = 0x4280001c; - data[92] = 0xe9e0000; - data[93] = 0x819e0010; - data[94] = 0x7c9b6000; - data[95] = 0x4085000c; - data[96] = 0xe9e0000; - data[97] = 0x937e0010; - data[98] = 0x42800020; - data[99] = 0x387e0000; - data[100] = 0x8083fffc; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x8004fff0; - data[1] = 0x7c0903a6; - data[2] = 0x8044fff4; - data[3] = 0x4e800421; - data[4] = 0x80410014; - data[5] = 0xe9e0000; - data[6] = 0x88be0017; - data[7] = 0x2f050000; - data[8] = 0x419a0154; - data[9] = 0xe9e0000; - data[10] = 0x80de0004; - data[11] = 0x2f860000; - data[12] = 0x419d0034; - data[13] = 0xa8e20006; - data[14] = 0x31070001; - data[15] = 0xb1020006; - data[16] = 0xa9220006; - data[17] = 0x21490022; - data[18] = 0xcaa0022; - data[19] = 0x554b103a; - data[20] = 0x7d825a14; - data[21] = 0x8062001c; - data[22] = 0x906c0018; - data[23] = 0x4bfff8b9; - data[24] = 0x42800114; - data[25] = 0xe9e0000; - data[26] = 0xe9e0000; - data[27] = 0xa89e0020; - data[28] = 0xa8be0022; - data[29] = 0x7cc42a14; - data[30] = 0xb0de0020; - data[31] = 0xe9e0000; - data[32] = 0xa8fe0020; - data[33] = 0x2c8703e8; - data[34] = 0x41840024; - data[35] = 0xe9e0000; - data[36] = 0xa91e0020; - data[37] = 0x3128fc18; - data[38] = 0xb13e0020; - data[39] = 0xe9e0000; - data[40] = 0x815e0018; - data[41] = 0x316a0001; - data[42] = 0x917e0018; - data[43] = 0xe9e0000; - data[44] = 0xe9e0000; - data[45] = 0x819e0018; - data[46] = 0x807e001c; - data[47] = 0x7c8c1a14; - data[48] = 0x909e0018; - data[49] = 0xe9e0000; - data[50] = 0x88be0016; - data[51] = 0x2f050000; - data[52] = 0x419a00a0; - data[53] = 0x387e0000; - data[54] = 0x80820014; - data[55] = 0x80c3fffc; - data[56] = 0x8006ffe0; - data[57] = 0x7c0903a6; - data[58] = 0x8046ffe4; - data[59] = 0x4e800421; - data[60] = 0x80410014; - data[61] = 0x2f830000; - data[62] = 0x419e0078; - data[63] = 0xe9e0000; - data[64] = 0x80e20014; - data[65] = 0xe870000; - data[66] = 0xe9e0000; - data[67] = 0xa9070020; - data[68] = 0xa93e0022; - data[69] = 0x7d484a14; - data[70] = 0xb15e0020; - data[71] = 0xe9e0000; - data[72] = 0xa97e0020; - data[73] = 0x2c8b03e8; - data[74] = 0x41840028; - data[75] = 0xe9e0000; - data[76] = 0xa99e0020; - data[77] = 0x306cfc18; - data[78] = 0xb07e0020; - data[79] = 0x80820014; - data[80] = 0xe840000; - data[81] = 0x80a40018; - data[82] = 0x30c50001; - data[83] = 0x90c40018; - data[84] = 0xe9e0000; - data[85] = 0x80e20014; - data[86] = 0xe870000; - data[87] = 0xe9e0000; - data[88] = 0x81070018; - data[89] = 0x813e001c; - data[90] = 0x7d484a14; - data[91] = 0x915e0018; - data[92] = 0x4bfff915; - data[93] = 0x428000f4; - data[94] = 0xa9620006; - data[95] = 0x2f0b0000; - data[96] = 0x409900e8; - data[97] = 0xa9820008; - data[98] = 0x306c0001; - data[99] = 0xb0620008; - data[100] = 0xa8820008; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x2f840022; - data[1] = 0x419c0010; - data[2] = 0xa8a20006; - data[3] = 0x20c50022; - data[4] = 0xb0c20008; - data[5] = 0xa8e20008; - data[6] = 0xb0e2000a; - data[7] = 0xa9020008; - data[8] = 0xca80022; - data[9] = 0x5509103a; - data[10] = 0x7d424a14; - data[11] = 0x83ca0018; - data[12] = 0xe9e0000; - data[13] = 0x817e0008; - data[14] = 0x318b0001; - data[15] = 0x919e0008; - data[16] = 0xe9e0000; - data[17] = 0x887e0015; - data[18] = 0x2c830000; - data[19] = 0x4186006c; - data[20] = 0x4bfffc91; - data[21] = 0x3ba30000; - data[22] = 0x387e0000; - data[23] = 0x8083fffc; - data[24] = 0x8004fff0; - data[25] = 0x7c0903a6; - data[26] = 0x8044fff4; - data[27] = 0x4e800421; - data[28] = 0x80410014; - data[29] = 0x4bfffc6d; - data[30] = 0x3b830000; - data[31] = 0x7f7de010; - data[32] = 0xe9e0000; - data[33] = 0x80be000c; - data[34] = 0x7f1b2800; - data[35] = 0x40980010; - data[36] = 0xe9e0000; - data[37] = 0x937e000c; - data[38] = 0x4280001c; - data[39] = 0xe9e0000; - data[40] = 0x80de0010; - data[41] = 0x7f9b3000; - data[42] = 0x409d000c; - data[43] = 0xe9e0000; - data[44] = 0x937e0010; - data[45] = 0x42800020; - data[46] = 0x387e0000; - data[47] = 0x80e3fffc; - data[48] = 0x8007fff0; - data[49] = 0x7c0903a6; - data[50] = 0x8047fff4; - data[51] = 0x4e800421; - data[52] = 0x80410014; - data[53] = 0x4280fc6c; - data[54] = 0x80820014; - data[55] = 0x80c3fffc; - data[56] = 0x8006ffe0; - data[57] = 0x7c0903a6; - data[58] = 0x8046ffe4; - data[59] = 0x4e800421; - data[60] = 0x80410014; - data[61] = 0x2f830000; - data[62] = 0x419e0078; - data[63] = 0xe9e0000; - data[64] = 0x80e20014; - data[65] = 0xe870000; - data[66] = 0xe9e0000; - data[67] = 0xa9070020; - data[68] = 0xa93e0022; - data[69] = 0x7d484a14; - data[70] = 0xb15e0020; - data[71] = 0xe9e0000; - data[72] = 0xa97e0020; - data[73] = 0x2c8b03e8; - data[74] = 0x41840028; - data[75] = 0xe9e0000; - data[76] = 0xa99e0020; - data[77] = 0x306cfc18; - data[78] = 0xb07e0020; - data[79] = 0x80820014; - data[80] = 0xe840000; - data[81] = 0x80a40018; - data[82] = 0x30c50001; - data[83] = 0x90c40018; - data[84] = 0xe9e0000; - data[85] = 0x80e20014; - data[86] = 0xe870000; - data[87] = 0xe9e0000; - data[88] = 0x81070018; - data[89] = 0x813e001c; - data[90] = 0x7d484a14; - data[91] = 0x915e0018; - data[92] = 0x4bfff915; - data[93] = 0x428000f4; - data[94] = 0xa9620006; - data[95] = 0x2f0b0000; - data[96] = 0x409900e8; - data[97] = 0xa9820008; - data[98] = 0x306c0001; - data[99] = 0xb0620008; - data[100] = 0xa8820008; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x802e7c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x383fffc8; - data[1] = 0xbb610048; - data[2] = 0x8001005c; - data[3] = 0x7c0803a6; - data[4] = 0x38210060; - data[5] = 0x4e800020; - data[6] = 0x9421ffc0; - data[7] = 0x7c0802a6; - data[8] = 0x9001003c; - data[9] = 0xbfe10038; - data[10] = 0x3be10038; - data[11] = 0x90410014; - data[12] = 0x8042ffec; - data[13] = 0x4bbf6dc5; - data[14] = 0x80410014; - data[15] = 0x390003e8; - data[16] = 0x7c6343d7; - data[17] = 0x40800008; - data[18] = 0x3063ffff; - data[19] = 0x42800008; - data[20] = 0x7fe00008; - data[21] = 0x383fffc8; - data[22] = 0xbbe10038; - data[23] = 0x8001003c; - data[24] = 0x7c0803a6; - data[25] = 0x38210040; - data[26] = 0x4e800020; - data[27] = 0x9421ffa8; - data[28] = 0x7c0802a6; - data[29] = 0x90010054; - data[30] = 0xbfa10048; - data[31] = 0x3be10038; - data[32] = 0x90410014; - data[33] = 0x3bc30000; - data[34] = 0x387e0000; - data[35] = 0x4bfffac5; - data[36] = 0x387e0000; - data[37] = 0x8123fffc; - data[38] = 0x8009ffe8; - data[39] = 0x7c0903a6; - data[40] = 0x8049ffec; - data[41] = 0x4e800421; - data[42] = 0x80410014; - data[43] = 0x21430001; - data[44] = 0x2c8a0000; - data[45] = 0x41860010; - data[46] = 0x38600001; - data[47] = 0x4bfff345; - data[48] = 0x42800154; - data[49] = 0xa9620004; - data[50] = 0xa9820006; - data[51] = 0x7c6b6214; - data[52] = 0x2f030020; - data[53] = 0x41980010; - data[54] = 0x38600002; - data[55] = 0x4bfff325; - data[56] = 0x42800134; - data[57] = 0x387f0000; - data[58] = 0x389f0008; - data[59] = 0x8042ffec; - data[60] = 0x4bbf6d49; - data[61] = 0x80410014; - data[62] = 0xa89f0008; - data[63] = 0xe9e0000; - data[64] = 0x80be0000; - data[65] = 0x7fa42a14; - data[66] = 0xe9e0000; - data[67] = 0x80de0000; - data[68] = 0x2f860000; - data[69] = 0x419d0014; - data[70] = 0xe9e0000; - data[71] = 0x80fe0004; - data[72] = 0x2c870000; - data[73] = 0x408500c0; - data[74] = 0xe9e0000; - data[75] = 0x390003e8; - data[76] = 0x7d3d43d7; - data[77] = 0x40800008; - data[78] = 0x3129ffff; - data[79] = 0x815f0000; - data[80] = 0x7d6a4a14; - data[81] = 0x917e0018; - data[82] = 0xe9e0000; - data[83] = 0x398003e8; - data[84] = 0x7c7d63d6; - data[85] = 0x7c6361d6; - data[86] = 0x7c63e811; - data[87] = 0x40800008; - data[88] = 0x306303e8; - data[89] = 0xb07e0020; - data[90] = 0xe9e0000; - data[91] = 0xe9e0000; - data[92] = 0x809e0004; - data[93] = 0x38a003e8; - data[94] = 0x7cc42bd7; - data[95] = 0x40800008; - data[96] = 0x30c6ffff; - data[97] = 0x90de001c; - data[98] = 0xe9e0000; - data[99] = 0xe9e0000; - data[100] = 0x80fe0004; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x390003e8; - data[1] = 0x7d2743d6; - data[2] = 0x7d2941d6; - data[3] = 0x7d293811; - data[4] = 0x40800008; - data[5] = 0x312903e8; - data[6] = 0xb13e0022; - data[7] = 0xe9e0000; - data[8] = 0x39400000; - data[9] = 0x915e0008; - data[10] = 0xe9e0000; - data[11] = 0x3d608000; - data[12] = 0x398bffff; - data[13] = 0x919e000c; - data[14] = 0xe9e0000; - data[15] = 0x38600000; - data[16] = 0x907e0010; - data[17] = 0x387e0000; - data[18] = 0x4bfff3d9; - data[19] = 0x42800028; - data[20] = 0xa8820006; - data[21] = 0x30a40001; - data[22] = 0xb0a20006; - data[23] = 0xa8c20006; - data[24] = 0x20e60022; - data[25] = 0xca70022; - data[26] = 0x54e8103a; - data[27] = 0x7d224214; - data[28] = 0x93c90018; - data[29] = 0xe9e0000; - data[30] = 0x39400001; - data[31] = 0x995e0017; - data[32] = 0x383fffc8; - data[33] = 0xbba10048; - data[34] = 0x80010054; - data[35] = 0x7c0803a6; - data[36] = 0x38210058; - data[37] = 0x4e800020; - data[38] = 0x9421ffb0; - data[39] = 0x7c0802a6; - data[40] = 0x9001004c; - data[41] = 0xbfc10044; - data[42] = 0x3be10038; - data[43] = 0x90410014; - data[44] = 0x39600001; - data[45] = 0x99620000; - data[46] = 0x39800000; - data[47] = 0xb1820002; - data[48] = 0x38600000; - data[49] = 0x906200a0; - data[50] = 0x906200a4; - data[51] = 0x38800000; - data[52] = 0xb0820004; - data[53] = 0x38a00000; - data[54] = 0xb0a20006; - data[55] = 0x38c00022; - data[56] = 0xb0c20008; - data[57] = 0x8062fff8; - data[58] = 0x8042ffe8; - data[59] = 0x4bbf73cd; - data[60] = 0x80410014; - data[61] = 0x9062000c; - data[62] = 0x80e2000c; - data[63] = 0xe870000; - data[64] = 0x3d008000; - data[65] = 0x3928ffff; - data[66] = 0x91270018; - data[67] = 0x8142000c; - data[68] = 0xe8a0000; - data[69] = 0x39600000; - data[70] = 0xb16a0020; - data[71] = 0x8062fff8; - data[72] = 0x8042ffe8; - data[73] = 0x4bbf7395; - data[74] = 0x80410014; - data[75] = 0x90620010; - data[76] = 0x81820010; - data[77] = 0xe8c0000; - data[78] = 0x3c608000; - data[79] = 0x906c0018; - data[80] = 0x80820010; - data[81] = 0xe840000; - data[82] = 0x38a00000; - data[83] = 0xb0a40020; - data[84] = 0x8062fffc; - data[85] = 0x8042ffe8; - data[86] = 0x4bbf7361; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - length = 101; - data[0] = 0x3d400080; - data[1] = 0x396a2ac8; - data[2] = 0x8182ffec; - data[3] = 0x916c0010; - data[4] = 0x904c0014; - data[5] = 0x383fffc8; - data[6] = 0xbbc10044; - data[7] = 0x8001004c; - data[8] = 0x7c0803a6; - data[9] = 0x38210050; - data[10] = 0x4e800020; - data[11] = 0x9421ffc0; - data[12] = 0xbfe1003c; - data[13] = 0x3be10038; - data[14] = 0x383fffc8; - data[15] = 0xbbe1003c; - data[16] = 0x38210040; - data[17] = 0x4e800020; - data[18] = 0x9421ffc0; - data[19] = 0xbfc10038; - data[20] = 0x3be10038; - data[21] = 0x3bc30000; - data[22] = 0x383fffc8; - data[23] = 0xbbc10038; - data[24] = 0x38210040; - data[25] = 0x4e800020; - data[26] = 0x9421ffc0; - data[27] = 0x7c0802a6; - data[28] = 0x9001003c; - data[29] = 0xbfe10038; - data[30] = 0x3be10038; - data[31] = 0x90410014; - data[32] = 0x4bfffe85; - data[33] = 0x383fffc8; - data[34] = 0xbbe10038; - data[35] = 0x8001003c; - data[36] = 0x7c0803a6; - data[37] = 0x38210040; - data[38] = 0x4e800020; - data[39] = 0x73c16892; - data[40] = 0x9001004c; - data[41] = 0xbfc10044; - data[42] = 0x3be10038; - data[43] = 0x90410014; - data[44] = 0x39600001; - data[45] = 0x99620000; - data[46] = 0x39800000; - data[47] = 0xb1820002; - data[48] = 0x38600000; - data[49] = 0x906200a0; - data[50] = 0x906200a4; - data[51] = 0x38800000; - data[52] = 0xb0820004; - data[53] = 0x38a00000; - data[54] = 0xb0a20006; - data[55] = 0x38c00022; - data[56] = 0xb0c20008; - data[57] = 0x8062fff8; - data[58] = 0x8042ffe8; - data[59] = 0x4bbf73cd; - data[60] = 0x80410014; - data[61] = 0x9062000c; - data[62] = 0x80e2000c; - data[63] = 0xe870000; - data[64] = 0x3d008000; - data[65] = 0x3928ffff; - data[66] = 0x91270018; - data[67] = 0x8142000c; - data[68] = 0xe8a0000; - data[69] = 0x39600000; - data[70] = 0xb16a0020; - data[71] = 0x8062fff8; - data[72] = 0x8042ffe8; - data[73] = 0x4bbf7395; - data[74] = 0x80410014; - data[75] = 0x90620010; - data[76] = 0x81820010; - data[77] = 0xe8c0000; - data[78] = 0x3c608000; - data[79] = 0x906c0018; - data[80] = 0x80820010; - data[81] = 0xe840000; - data[82] = 0x38a00000; - data[83] = 0xb0a40020; - data[84] = 0x8062fffc; - data[85] = 0x8042ffe8; - data[86] = 0x4bbf7361; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x80330c; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x0; - data[1] = 0x803348; - data[2] = 0x0; - data[3] = 0x80336c; - data[4] = 0x8; - data[5] = 0x8034a0; - data[6] = 0x0; - data[7] = 0x80330c; - data[8] = 0x6c; - data[9] = 0x803378; - data[10] = 0x15c; - data[11] = 0x8034d4; - data[12] = 0x8; - data[13] = 0x8034dc; - data[14] = 0x0; - data[15] = 0x9; - data[16] = 0x4472764d; - data[17] = 0x70696f73; - data[18] = 0x6d000000; - data[19] = 0x0; - data[20] = 0x0; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x3fa6e0; - data[26] = 0x8451fdf2; - data[27] = 0x7c0802a6; - data[28] = 0x9001003c; - data[29] = 0xbfe10038; - data[30] = 0x3be10038; - data[31] = 0x90410014; - data[32] = 0x4bfffe85; - data[33] = 0x383fffc8; - data[34] = 0xbbe10038; - data[35] = 0x8001003c; - data[36] = 0x7c0803a6; - data[37] = 0x38210040; - data[38] = 0x4e800020; - data[39] = 0x73c16892; - data[40] = 0x9001004c; - data[41] = 0xbfc10044; - data[42] = 0x3be10038; - data[43] = 0x90410014; - data[44] = 0x39600001; - data[45] = 0x99620000; - data[46] = 0x39800000; - data[47] = 0xb1820002; - data[48] = 0x38600000; - data[49] = 0x906200a0; - data[50] = 0x906200a4; - data[51] = 0x38800000; - data[52] = 0xb0820004; - data[53] = 0x38a00000; - data[54] = 0xb0a20006; - data[55] = 0x38c00022; - data[56] = 0xb0c20008; - data[57] = 0x8062fff8; - data[58] = 0x8042ffe8; - data[59] = 0x4bbf73cd; - data[60] = 0x80410014; - data[61] = 0x9062000c; - data[62] = 0x80e2000c; - data[63] = 0xe870000; - data[64] = 0x3d008000; - data[65] = 0x3928ffff; - data[66] = 0x91270018; - data[67] = 0x8142000c; - data[68] = 0xe8a0000; - data[69] = 0x39600000; - data[70] = 0xb16a0020; - data[71] = 0x8062fff8; - data[72] = 0x8042ffe8; - data[73] = 0x4bbf7395; - data[74] = 0x80410014; - data[75] = 0x90620010; - data[76] = 0x81820010; - data[77] = 0xe8c0000; - data[78] = 0x3c608000; - data[79] = 0x906c0018; - data[80] = 0x80820010; - data[81] = 0xe840000; - data[82] = 0x38a00000; - data[83] = 0xb0a40020; - data[84] = 0x8062fffc; - data[85] = 0x8042ffe8; - data[86] = 0x4bbf7361; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x803378; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ffb0; - data[1] = 0x7c000026; - data[2] = 0x9001004c; - data[3] = 0xbfa10040; - data[4] = 0x3be10038; - data[5] = 0x3bc30000; - data[6] = 0x2c840000; - data[7] = 0x4e663042; - data[8] = 0x3c600030; - data[9] = 0x38836102; - data[10] = 0xa3a40000; - data[11] = 0x40930014; - data[12] = 0x38a00001; - data[13] = 0x7ca5f030; - data[14] = 0x7fbd2b78; - data[15] = 0x42800010; - data[16] = 0x38c00001; - data[17] = 0x7cc6f030; - data[18] = 0x7fbd3078; - data[19] = 0x3ce00030; - data[20] = 0x39076102; - data[21] = 0xb3a80000; - data[22] = 0x383fffc8; - data[23] = 0xbba10040; - data[24] = 0x8001004c; - data[25] = 0x7c0ff120; - data[26] = 0x38210050; - data[27] = 0x4e800020; - data[28] = 0x9421ffb0; - data[29] = 0x7c000026; - data[30] = 0x9001004c; - data[31] = 0xbfa10040; - data[32] = 0x3be10038; - data[33] = 0x3bc30000; - data[34] = 0x2f040000; - data[35] = 0x4e7ad042; - data[36] = 0x3d200030; - data[37] = 0x39496100; - data[38] = 0xa3aa0000; - data[39] = 0x40930014; - data[40] = 0x39600001; - data[41] = 0x7d6bf030; - data[42] = 0x7fbd5b78; - data[43] = 0x42800010; - data[44] = 0x39800001; - data[45] = 0x7d8cf030; - data[46] = 0x7fbd6078; - data[47] = 0x3c600030; - data[48] = 0x38836100; - data[49] = 0xb3a40000; - data[50] = 0x383fffc8; - data[51] = 0xbba10040; - data[52] = 0x8001004c; - data[53] = 0x7c0ff120; - data[54] = 0x38210050; - data[55] = 0x4e800020; - data[56] = 0x9421ffb0; - data[57] = 0xbfa10044; - data[58] = 0x3be10038; - data[59] = 0x3bc30000; - data[60] = 0x3ca00030; - data[61] = 0x38c56100; - data[62] = 0xa3a60000; - data[63] = 0x7fc7f0f8; - data[64] = 0x5fa73801; - data[65] = 0x4f821042; - data[66] = 0x7d000026; - data[67] = 0x5503effe; - data[68] = 0x42800008; - data[69] = 0x7fe00008; - data[70] = 0x383fffc8; - data[71] = 0xbba10044; - data[72] = 0x38210050; - data[73] = 0x4e800020; - data[74] = 0x9421ffc0; - data[75] = 0x7c0802a6; - data[76] = 0x9001003c; - data[77] = 0xbfe10038; - data[78] = 0x3be10038; - data[79] = 0x90410014; - data[80] = 0x383fffc8; - data[81] = 0xbbe10038; - data[82] = 0x8001003c; - data[83] = 0x7c0803a6; - data[84] = 0x38210040; - data[85] = 0x4e800020; - data[86] = 0x84bda90a; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x8034dc; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x1; - data[1] = 0x803728; - data[2] = 0x80351c; - data[3] = 0x803570; - data[4] = 0x803540; - data[5] = 0x10; - data[6] = 0x803680; - data[7] = 0x0; - data[8] = 0x8034dc; - data[9] = 0xf0; - data[10] = 0x8035cc; - data[11] = 0x14c; - data[12] = 0x803718; - data[13] = 0x10; - data[14] = 0x803728; - data[15] = 0x8; - data[16] = 0xf; - data[17] = 0x44727674; - data[18] = 0x6573744c; - data[19] = 0x6564426c; - data[20] = 0x696e6b00; - data[21] = 0x0; - data[22] = 0x0; - data[23] = 0x0; - data[24] = 0x0; - data[25] = 0x3fa720; - data[26] = 0x80325c; - data[27] = 0x8034dc; - data[28] = 0x803570; - data[29] = 0x8022f0; - data[30] = 0x80325c; - data[31] = 0x802370; - data[32] = 0x80325c; - data[33] = 0x8035cc; - data[34] = 0x803728; - data[35] = 0x1; - data[36] = 0xfffffffc; - data[37] = 0x24; - data[38] = 0x1; - data[39] = 0x3; - data[40] = 0xfffffffc; - data[41] = 0x8034dc; - data[42] = 0x80351c; - data[43] = 0x8035b4; - data[44] = 0x0; - data[45] = 0x802130; - data[46] = 0x803570; - data[47] = 0x0; - data[48] = 0x0; - data[49] = 0x0; - data[50] = 0x0; - data[51] = 0x0; - data[52] = 0x0; - data[53] = 0xffffffc0; - data[54] = 0xb; - data[55] = 0x3f5e426c; - data[56] = 0x696e6b54; - data[57] = 0x61736b00; - data[58] = 0x0; - data[59] = 0x86212a8c; - data[60] = 0x3ca00030; - data[61] = 0x38c56100; - data[62] = 0xa3a60000; - data[63] = 0x7fc7f0f8; - data[64] = 0x5fa73801; - data[65] = 0x4f821042; - data[66] = 0x7d000026; - data[67] = 0x5503effe; - data[68] = 0x42800008; - data[69] = 0x7fe00008; - data[70] = 0x383fffc8; - data[71] = 0xbba10044; - data[72] = 0x38210050; - data[73] = 0x4e800020; - data[74] = 0x9421ffc0; - data[75] = 0x7c0802a6; - data[76] = 0x9001003c; - data[77] = 0xbfe10038; - data[78] = 0x3be10038; - data[79] = 0x90410014; - data[80] = 0x383fffc8; - data[81] = 0xbbe10038; - data[82] = 0x8001003c; - data[83] = 0x7c0803a6; - data[84] = 0x38210040; - data[85] = 0x4e800020; - data[86] = 0x84bda90a; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - baseAddr = 0x8035cc; - bdi.startFastDownload(baseAddr); - length = 101; - data[0] = 0x9421ffb0; - data[1] = 0x7c0802a6; - data[2] = 0x9001004c; - data[3] = 0xbfa10040; - data[4] = 0x3be10038; - data[5] = 0x90410014; - data[6] = 0x3bc30000; - data[7] = 0x88620004; - data[8] = 0x2c830000; - data[9] = 0x4186001c; - data[10] = 0x3860000f; - data[11] = 0x38800001; - data[12] = 0x8042fff8; - data[13] = 0x4bfffde9; - data[14] = 0x80410014; - data[15] = 0x42800018; - data[16] = 0x3860000f; - data[17] = 0x38800000; - data[18] = 0x8042fff8; - data[19] = 0x4bfffdd1; - data[20] = 0x80410014; - data[21] = 0x88820004; - data[22] = 0x20a40001; - data[23] = 0x98a20004; - data[24] = 0x383fffc8; - data[25] = 0xbba10040; - data[26] = 0x8001004c; - data[27] = 0x7c0803a6; - data[28] = 0x38210050; - data[29] = 0x4e800020; - data[30] = 0x9421ffb8; - data[31] = 0xbfc10040; - data[32] = 0x3be10038; - data[33] = 0x3bc00000; - data[34] = 0x2f1e004c; - data[35] = 0x41990018; - data[36] = 0x30de0100; - data[37] = 0x3ce00080; - data[38] = 0x7cc7f12e; - data[39] = 0x33de0004; - data[40] = 0x4280ffe8; - data[41] = 0x383fffc8; - data[42] = 0xbbc10040; - data[43] = 0x38210048; - data[44] = 0x4e800020; - data[45] = 0x9421ffc0; - data[46] = 0x7c0802a6; - data[47] = 0x9001003c; - data[48] = 0xbfe10038; - data[49] = 0x3be10038; - data[50] = 0x90410014; - data[51] = 0x8062fffc; - data[52] = 0x8042fff0; - data[53] = 0x4bbf6e29; - data[54] = 0x80410014; - data[55] = 0x90620000; - data[56] = 0x81020000; - data[57] = 0xe880000; - data[58] = 0x392001f4; - data[59] = 0x91280004; - data[60] = 0x80620000; - data[61] = 0x8042fff4; - data[62] = 0x4bfff825; - data[63] = 0x80410014; - data[64] = 0x3860000f; - data[65] = 0x38800001; - data[66] = 0x8042fff8; - data[67] = 0x4bfffca1; - data[68] = 0x80410014; - data[69] = 0x3860000f; - data[70] = 0x38800001; - data[71] = 0x8042fff8; - data[72] = 0x4bfffcfd; - data[73] = 0x80410014; - data[74] = 0x39400000; - data[75] = 0x99420004; - data[76] = 0x383fffc8; - data[77] = 0xbbe10038; - data[78] = 0x8001003c; - data[79] = 0x7c0803a6; - data[80] = 0x38210040; - data[81] = 0x4e800020; - data[82] = 0x87111e2a; - data[83] = 0x7c0803a6; - data[84] = 0x38210040; - data[85] = 0x4e800020; - data[86] = 0x84bda90a; - data[87] = 0x80410014; - data[88] = 0x90620014; - data[89] = 0x80c20010; - data[90] = 0x90c20018; - data[91] = 0x3bc00001; - data[92] = 0x2f1e0021; - data[93] = 0x41990020; - data[94] = 0xcbe0022; - data[95] = 0x57c7103a; - data[96] = 0x7d023a14; - data[97] = 0x8122000c; - data[98] = 0x91280018; - data[99] = 0x33de0001; - data[100] = 0x4280ffe0; - add(baseAddr, data, length); - bdi.fastDownload(data, length); - bdi.stopFastDownload(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/dict/Register.java b/mcdp/src/ch/ntb/mcdp/dict/Register.java deleted file mode 100644 index 4d066e0..0000000 --- a/mcdp/src/ch/ntb/mcdp/dict/Register.java +++ /dev/null @@ -1,232 +0,0 @@ -package ch.ntb.mcdp.dict; - -/** - * Representation of a register. - * - * @author schlaepfer - */ -/** - * @author schlaepfer - * - */ -public abstract class Register { - - public enum Accessmode { - none, supervisor, user, test - }; - - public enum Accessattr { - none, readonly, writeonly - }; - - private static final String INIT_STRING = "***"; - - /** - * Register specific type values.
- * The index of each type in the types array represents its numeric value. - * When the register is read from an xml file, its type is converted from a - * string (xml file) to an integer (index of types field). Therefore each - * type in the corresponding xml file must be included in the type array.
- * The type field must be initialised in the static { } - * section of the subclass. - */ - protected static String[] types = null; - - /** - * Menemoic of the register. Registers are identified by this value. - */ - private String mnemonic = INIT_STRING; - - /** - * Alternative mnemonic of the register - */ - private String altmnemonic = INIT_STRING; - - /** - * Register specific type - */ - private int type; - - /** - * Address or a register specific value (e.g. BDI-identifier) - */ - private int value; - - /** - * Size in bytes (width) - */ - private int size; - - /** - * A string description of the register - */ - private String description = ""; - - /** - * The register access mode - */ - private Accessmode accessmode = Accessmode.none; - - /** - * The register access attribute - */ - private Accessattr accessattr = Accessattr.none; - - /** - * @return the mnemonic of this register - */ - public String getMnemonic() { - return mnemonic; - } - - /** - * Set the mnemonic of this register - * - * @param name - */ - public void setMnemonic(String name) { - this.mnemonic = name; - } - - /** - * @return alternative mnemonic of the register - */ - public String getAltmnemonic() { - return altmnemonic; - } - - /** - * Set the alternative name of the register. - * - * @param altname - */ - public void setAltmnemonic(String altname) { - this.altmnemonic = altname; - } - - /** - * @return the register description - */ - public String getDescription() { - return description; - } - - /** - * Set the register description. - * - * @param description - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * @return the size in bytes (width) - */ - public int getSize() { - return size; - } - - /** - * Set the size in bytes (width) - * - * @param size - */ - public void setSize(int size) { - this.size = size; - } - - /** - * @return the type of the register. This is the index of the static - * types String array. - */ - public int getType() { - return type; - } - - /** - * Set the type of the register. This is the index of the static - * types String array. - * - * @param type - */ - public void setType(int type) { - this.type = type; - } - - /** - * @return the address or a register specific value (e.g. BDI-identifier) - */ - public int getValue() { - return value; - } - - /** - * Set the address or a register specific value (e.g. BDI-identifier). - * - * @param value - */ - public void setValue(int value) { - this.value = value; - } - - /** - * @return true if a mnemonic was set and the size is valid (size > 0), else - * false - */ - public boolean isValid() { - if ((mnemonic == INIT_STRING) || (size <= 0)) - return false; - return true; - } - - @Override - public String toString() { - return new String(mnemonic + "\t" + altmnemonic + "\t" + types[type] - + "\t0x" + Integer.toHexString(value) + "\t" + size + "\t" - + description); - } - - /** - * Get the register specific type strings. This value has to be initialised - * in the static section of the derived Register class as - * this is Register specific. - * - * @return types strings - */ - public static String[] getTypes() { - return types; - } - - /** - * @return the access attributes of the register - */ - public Accessattr getAccessattr() { - return accessattr; - } - - /** - * Set the access attribute of the register - * - * @param accessattr - */ - public void setAccessattr(Accessattr accessattr) { - this.accessattr = accessattr; - } - - /** - * @return the access mode of this register - */ - public Accessmode getAccessmode() { - return accessmode; - } - - /** - * Set the access mode of this register - * - * @param accessmode - */ - public void setAccessmode(Accessmode accessmode) { - this.accessmode = accessmode; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/dict/RegisterDict.java b/mcdp/src/ch/ntb/mcdp/dict/RegisterDict.java deleted file mode 100644 index 9f55f1d..0000000 --- a/mcdp/src/ch/ntb/mcdp/dict/RegisterDict.java +++ /dev/null @@ -1,260 +0,0 @@ -package ch.ntb.mcdp.dict; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Iterator; -import java.util.LinkedList; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.DefaultHandler; - -public abstract class RegisterDict extends DefaultHandler { - - private static final long serialVersionUID = -582382284126896830L; - - private Class regClass; - private Method regClassGetTypesMethod; - private static final String GetTypes_METHOD_NAME = "getTypes"; - - private LinkedList registers; - - private String[] types; - - private static final String ELEMENT_REGISTER = "register"; - private static final String ELEMENT_DESCRIPTION = "description"; - - private static final String ATTR_MNEMONIC = "mnemonic"; - private static final String ATTR_ALTMNEMONIC = "altmnemonic"; - private static final String ATTR_TYPE = "type"; - private static final String ATTR_VALUE = "value"; - private static final String ATTR_SIZE = "size"; - private static final String ATTR_ACCESSMODE = "accessmode"; - private static final String ATTR_ACCESSATTR = "accessattr"; - - private Register reg; - private StringBuffer cdata; - - /** - * Default constructor which takes the Class object from a - * Register subclass as argument. The registerDict will be of - * this Register-type.
- * An example:
- * MPC555Register extends Register -> use MPC555Register.class - * as parameter. - * - * @param registerClass - * subclass of Register - */ - protected RegisterDict(Class registerClass) { - this.regClass = registerClass; - try { - this.regClassGetTypesMethod = regClass.getMethod( - GetTypes_METHOD_NAME, (Class[]) null); - this.regClass.newInstance(); - this.types = (String[]) regClassGetTypesMethod.invoke( - (Object[]) null, (Object[]) null); - } catch (Exception e) { - e.printStackTrace(); - System.exit(1); - } - this.registers = new LinkedList(); - } - - private int convertType(String typeStr) throws SAXException { - for (int index = 0; index < types.length; index++) { - if (typeStr.equals(types[index])) { - return index; - } - } - throw new SAXException("invalid register definition: " + typeStr); - } - - private int parseInt(String s) { - if (s == "") - return 0; - if (s.indexOf('x') > 0) { - // is hex number - if (s.length() <= 2) { // exception for "0x" - throw new NumberFormatException("string too short: " + s); - } - if ((s.length() > 10)) { // exception for e.g. 0x112345678 - throw new NumberFormatException("number too large: " + s); - } - // check if string too long (max - return (int) Long.parseLong(s.substring(s.indexOf('x') + 1, s - .length()), 16); - } else { - // is decimal number - return Integer.parseInt(s); - } - } - - /** - * Adds the registers from the specified xml-file to the register - * dictionary.
- * The xml-file must be structured according to - * registerDictionary.dtd. The dtd-file must be adapted to - * the type values specific to this register. Include - * - * in your xml file. - * - * @param xmlPathname - * path to the xml file - * @throws IOException - * throws an IOException if the file is not found - * @throws SAXException - * @throws ParserConfigurationException - * @throws ParserConfigurationException - * throws an ParserConfigurationException if the SAX parser - * can't be configured - * @throws SAXException - * throws an SAXException if the file could not be successfully - * parsed - */ - public void addRegistersFromFile(String xmlPathname) throws IOException, - ParserConfigurationException, SAXException { - // reset temporary register variable - reg = null; - // Use the default (non-validating) parser - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setValidating(true); - // Parse the input - SAXParser saxParser = factory.newSAXParser(); - saxParser.parse(new File(xmlPathname), this); - } - - /** - * Print a list of Registers to standard out. - */ - public void printRegisters() { - System.out - .println("******************** register dictionary *********************"); - System.out - .println("Mnemonic\tAltmnemonic\tType\tAddress\tSize\tDescription"); - System.out - .println("**************************************************************"); - for (Iterator i = registers.iterator(); i.hasNext();) { - Register r = (Register) i.next(); - System.out.println(r.toString()); - } - System.out - .println("**************************************************************"); - } - - /** - * Get a register by its name. - * - * @param name - * the register name - * @return register on null if no register is found - */ - public Register getRegister(String name) { - for (Iterator i = registers.iterator(); i.hasNext();) { - Register r = (Register) i.next(); - if (r.getMnemonic().equals(name) || r.getAltmnemonic().equals(name)) { - return r; - } - } - return null; - } - - // =========================================================== - // SAX DocumentHandler methods - // =========================================================== - - public void startDocument() throws SAXException { - } - - public void endDocument() throws SAXException { - } - - public void startElement(String namespaceURI, String lName, // local name - String qName, // qualified name - Attributes attrs) throws SAXException { - if (qName.equals(ELEMENT_REGISTER)) { - if (attrs != null) { - // instantiate new register - try { - reg = (Register) regClass.newInstance(); - } catch (Exception e) { - throw new SAXException(e.getMessage()); - } - for (int i = 0; i < attrs.getLength(); i++) { - String attr_qName = attrs.getQName(i); - String attr_value = attrs.getValue(i); - if (attr_qName.equals(ATTR_MNEMONIC)) { - reg.setMnemonic(attr_value); - } else if (attr_qName.equals(ATTR_ALTMNEMONIC)) { - reg.setAltmnemonic(attr_value); - } else if (attr_qName.equals(ATTR_TYPE)) { - reg.setType(convertType(attr_value)); - } else if (attr_qName.equals(ATTR_SIZE)) { - reg.setSize(parseInt(attr_value)); - } else if (attr_qName.equals(ATTR_VALUE)) { - reg.setValue(parseInt(attr_value)); - } else if (attr_qName.equals(ATTR_ACCESSMODE)) { - reg.setAccessmode(Register.Accessmode - .valueOf(attr_value)); - } else if (attr_qName.equals(ATTR_ACCESSATTR)) { - reg.setAccessattr(Register.Accessattr - .valueOf(attr_value)); - } - } - } else { - throw new SAXException("attributes expected"); - } - } else if (qName.equals(ELEMENT_DESCRIPTION)) { - // reset the cdata for descriptions - cdata = new StringBuffer(); - } - } - - @SuppressWarnings("unchecked") - public void endElement(String namespaceURI, String sName, // simple - // name - String qName // qualified name - ) throws SAXException { - if (qName.equals(ELEMENT_DESCRIPTION)) { - reg.setDescription(cdata.toString().trim()); - } - if (reg != null) { - registers.add(reg); - reg = null; - } - } - - public void characters(char buf[], int offset, int len) throws SAXException { - int startOffset = offset; - while ((offset < startOffset + len) && (buf[offset] <= ' ')) { - offset++; - } - len -= offset - startOffset; - while ((len > 0) && (buf[offset + len - 1] <= ' ')) { - len--; - } - cdata.append(buf, offset, len); - } - - // =========================================================== - // SAX ErrorHandler methods - // =========================================================== - - // treat validation errors as fatal - public void error(SAXParseException e) throws SAXParseException { - throw e; - } - - // dump warnings too - public void warning(SAXParseException err) throws SAXParseException { - System.out.println("** Warning" + ", line " + err.getLineNumber() - + ", uri " + err.getSystemId()); - System.out.println(" " + err.getMessage()); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/dict/test/Test332Dict.java b/mcdp/src/ch/ntb/mcdp/dict/test/Test332Dict.java deleted file mode 100644 index 29d6e5e..0000000 --- a/mcdp/src/ch/ntb/mcdp/dict/test/Test332Dict.java +++ /dev/null @@ -1,32 +0,0 @@ -package ch.ntb.mcdp.dict.test; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.xml.sax.SAXException; - -import ch.ntb.mcdp.mc68332.MC68332RegisterDict; - -public class Test332Dict { - - private static final String PATH_TO_REGISTER_FILE = "resources/targets/mc68332/registerDictionary.xml"; - - public static void main(String[] args) { - MC68332RegisterDict regdict = new MC68332RegisterDict(); - - try { - regdict.addRegistersFromFile(PATH_TO_REGISTER_FILE); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ParserConfigurationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - regdict.printRegisters(); -} -} diff --git a/mcdp/src/ch/ntb/mcdp/dict/test/Test555Dict.java b/mcdp/src/ch/ntb/mcdp/dict/test/Test555Dict.java deleted file mode 100644 index 1ad6761..0000000 --- a/mcdp/src/ch/ntb/mcdp/dict/test/Test555Dict.java +++ /dev/null @@ -1,29 +0,0 @@ -package ch.ntb.mcdp.dict.test; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.xml.sax.SAXException; - -import ch.ntb.mcdp.mpc555.MPC555RegisterDict; - -public class Test555Dict { - - private static final String PATH_TO_REGISTER_FILE = "resources/targets/mpc555/registerDictionary.xml"; - - public static void main(String[] args) { - MPC555RegisterDict regdict = new MPC555RegisterDict(); - - try { - regdict.addRegistersFromFile(PATH_TO_REGISTER_FILE); - } catch (IOException e) { - e.printStackTrace(); - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } catch (SAXException e) { - e.printStackTrace(); - } - regdict.printRegisters(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/mc68332/IMCBTargetBoard.java b/mcdp/src/ch/ntb/mcdp/mc68332/IMCBTargetBoard.java deleted file mode 100644 index 638ab64..0000000 --- a/mcdp/src/ch/ntb/mcdp/mc68332/IMCBTargetBoard.java +++ /dev/null @@ -1,94 +0,0 @@ -package ch.ntb.mcdp.mc68332; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.xml.sax.SAXException; - -import ch.ntb.mcdp.bdi.BDIException; -import ch.ntb.mcdp.bdi.MC68332; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.mcdp.utils.logger.McdpLogger; -import ch.ntb.usb.USBException; - -public class IMCBTargetBoard { - - private static final McdpLogger logger = LogUtil.ch_ntb_mcdp_mc68332; - - private final static String dictionaryPath = "resources/targets/mc68332/registerDictionary.xml"; - - private static MC68332RegisterDict regDict = new MC68332RegisterDict(); - - private MC68332 bdi; - - public IMCBTargetBoard(MC68332 bdi) { - this.bdi = bdi; - } - - public void writeRegister(String name, int value) throws USBException, - DispatchException, BDIException { - logger.info("writeRegister: " + name + ", value: 0x" - + Integer.toHexString(value)); - MC68332Register r = (MC68332Register) regDict.getRegister(name); - switch (r.getType()) { - case MC68332Register.CtrlReg: - bdi.writeMem(r.getValue(), value, r.getSize()); - break; - case MC68332Register.SysReg: - bdi.writeSysReg(r.getValue(), value); - break; - case MC68332Register.UserReg: - bdi.writeUserReg(r.getValue(), value); - break; - } - } - - public int readRegister(String name) throws USBException, - DispatchException, BDIException { - logger.info("readRegister: " + name); - MC68332Register r = (MC68332Register) regDict.getRegister(name); - switch (r.getType()) { - case MC68332Register.CtrlReg: - return bdi.readMem(r.getValue(), r.getSize()); - case MC68332Register.SysReg: - return bdi.readSysReg(r.getValue()); - case MC68332Register.UserReg: - return bdi.readUserReg(r.getValue()); - } - return -1; - } - - public void init() throws USBException, DispatchException, BDIException, - IOException, ParserConfigurationException, SAXException { - - logger.info("reading dictionary file from " + dictionaryPath); - regDict.addRegistersFromFile(dictionaryPath); - - bdi.reset_target(); - - // regDict.printRegisters(); - - writeRegister("SR", 0x2700); - writeRegister("SFC", 0x05); - writeRegister("DFC", 0x05); - writeRegister("VBR", 0x100000); - - writeRegister("SIMCR", 0x0404F); - writeRegister("SYNCR", 0x7F80); - writeRegister("SYPCR", 0x04); - writeRegister("CSPAR0", 0x03FF); - writeRegister("CSPAR1", 0x01); - writeRegister("CSBARBT", 0x07); - writeRegister("CSORBT", 0x06830); - writeRegister("CSBAR0", 0x07); - writeRegister("CSOR0", 0x07430); - writeRegister("CSBAR1", 0x01005); - writeRegister("CSOR1", 0x06C30); - writeRegister("CSBAR2", 0x01005); - writeRegister("CSOR2", 0x05030); - writeRegister("CSBAR3", 0x01005); - writeRegister("CSOR3", 0x03030); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java b/mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java deleted file mode 100644 index 7c57672..0000000 --- a/mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java +++ /dev/null @@ -1,28 +0,0 @@ -package ch.ntb.mcdp.mc68332; - -import ch.ntb.mcdp.dict.Register; - -/** - * Representation of a MC68332 Register - * - * For system and user registers the value value is used as BDI - * specific identifier (code specific to each register from the Technical - * Reference Manual). - * - * @author schlaepfer - * - */ -public class MC68332Register extends Register { - - // Register Types - static { - types = new String[] { "UserReg", "SysReg", "CtrlReg" }; - } - - static final int UserReg = 0; - - static final int SysReg = 1; - - static final int CtrlReg = 2; - -} diff --git a/mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java b/mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java deleted file mode 100644 index ff68729..0000000 --- a/mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java +++ /dev/null @@ -1,10 +0,0 @@ -package ch.ntb.mcdp.mc68332; - -import ch.ntb.mcdp.dict.RegisterDict; - -public class MC68332RegisterDict extends RegisterDict { - - public MC68332RegisterDict() { - super(MC68332Register.class); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java b/mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java deleted file mode 100644 index 0a0072e..0000000 --- a/mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.ntb.mcdp.mpc555; - -import ch.ntb.mcdp.dict.Register; - -/** - * Representation of a MPC555 Register - * - * @author schlaepfer - * - */ -public class MPC555Register extends Register { - - // Register Types - static { - types = new String[] { "GPR", "FPR", "SPR", "MSR", "CR", "FPSCR", - "CtrlReg" }; - } - - static final int GPR = 0; - - static final int FPR = 1; - - static final int SPR = 2; - - static final int MSR = 3; - - static final int CR = 4; - - static final int FPSCR = 5; - - static final int CtrlReg = 6; - -} diff --git a/mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java b/mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java deleted file mode 100644 index 0cdfd7e..0000000 --- a/mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java +++ /dev/null @@ -1,10 +0,0 @@ -package ch.ntb.mcdp.mpc555; - -import ch.ntb.mcdp.dict.RegisterDict; - -public class MPC555RegisterDict extends RegisterDict { - - public MPC555RegisterDict() { - super(MPC555Register.class); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/system/memMap/Device.java b/mcdp/src/ch/ntb/mcdp/system/memMap/Device.java deleted file mode 100644 index ec682ae..0000000 --- a/mcdp/src/ch/ntb/mcdp/system/memMap/Device.java +++ /dev/null @@ -1,45 +0,0 @@ -package ch.ntb.mcdp.system.memMap; - -import java.util.LinkedList; - -public class Device { - - private String type; - - private int width; - - private int size = -1; - - private MemAttributes attr; - - LinkedList segments; - - Device(String type, int width) { - this.type = type; - this.width = width; - this.attr = new MemAttributes(); - this.size = -1; - segments = new LinkedList(); - } - - public String getType() { - return type; - } - - public int getWidth() { - return width; - } - - public MemAttributes getAttributes() { - return attr; - } - - public int getSize() { - return size; - } - - public void setSize(int size) { - this.size = size; - } - -} diff --git a/mcdp/src/ch/ntb/mcdp/system/memMap/MemAttributes.java b/mcdp/src/ch/ntb/mcdp/system/memMap/MemAttributes.java deleted file mode 100644 index 420fb6e..0000000 --- a/mcdp/src/ch/ntb/mcdp/system/memMap/MemAttributes.java +++ /dev/null @@ -1,82 +0,0 @@ -package ch.ntb.mcdp.system.memMap; - -/** - * Attributes for Device and Segment objects.
- * Use the predefined constants to set or unset an attribute. - * - * @author schlaepfer - * - */ -public class MemAttributes { - - public static int NOF_ATTRIBUTES = 8; - - public static int read = 0, write = 1, const_ = 2, code = 3, var = 4, - sysconst = 5, heap = 6, stack = 7; - - private boolean[] values = new boolean[NOF_ATTRIBUTES]; - - MemAttributes() { - for (int i = 0; i < values.length; i++) { - values[i] = false; - } - } - - public void set(int index) { - values[index] = true; - } - - public void unset(int index) { - values[index] = false; - } - - public boolean isSet(int index) { - return values[index]; - } - - public boolean isReadSet() { - return values[read]; - } - - public boolean isWriteSet() { - return values[write]; - } - - public boolean isConstSet() { - return values[const_]; - } - - public boolean isCodeSet() { - return values[code]; - } - - public boolean isVarSet() { - return values[var]; - } - - public boolean isSysconstSet() { - return values[sysconst]; - } - - public boolean isHeapSet() { - return values[heap]; - } - - public boolean isStackSet() { - return values[stack]; - } - - public void reset() { - for (int i = 0; i < values.length; i++) { - values[i] = false; - } - } - - public MemAttributes clone() { - MemAttributes at = new MemAttributes(); - for (int i = 0; i < NOF_ATTRIBUTES; i++) { - at.values[i] = values[i]; - } - return at; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/system/memMap/MemoryMap.java b/mcdp/src/ch/ntb/mcdp/system/memMap/MemoryMap.java deleted file mode 100644 index 49bf8dd..0000000 --- a/mcdp/src/ch/ntb/mcdp/system/memMap/MemoryMap.java +++ /dev/null @@ -1,407 +0,0 @@ -package ch.ntb.mcdp.system.memMap; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.Iterator; -import java.util.TreeMap; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -public class MemoryMap { - - private TreeMap devices; - - // Elements - private static final String E_MEMORY_MAP = "memorymap"; - - private static final String E_DEVICE = "device"; - - private static final String A_DEVICE_TYPE = "type"; - - private static final String A_DEVICE_WIDTH = "width"; - - private static final String E_ATTRIBUTES = "attributes"; - - private static final String E_SIZE = "size"; - - private static final String E_SEGMENT = "segment"; - - private static final String E_INIT = "init"; - - private static final String E_ASSIGNMENT = "assignment"; - - private static final String A_NAME = "name"; - - private static final String A_TYPE = "type"; - - private static final String A_TYPE_VALUE = "value"; - - private static final String A_TYPE_URI = "uri"; - - private static final String A_MODE = "mode"; - - private static final String V_MODE_REPLACE = "replace"; - - private static final String A_READ = "read"; - - private static final String A_WRITE = "write"; - - private static final String A_CONST = "const"; - - private static final String A_CODE = "code"; - - private static final String A_VAR = "var"; - - private static final String A_SYSCONST = "sysconst"; - - private static final String A_HEAP = "heap"; - - private static final String A_STACK = "stack"; - - private static final String V_ADD = "add"; - - private static final String V_REMOVE = "remove"; - - private static final String E_BASE = "base"; - - private static final String E_SUBSEGMENT = "subsegment"; - - private static final String E_SUBSEGMENTLIST = "subsegmentList"; - - private static final String A_START_ID = "startID"; - - private static final String A_NUMBER_OF_ENTRIES = "numberOfEntries"; - - private int parseInt(String s) { - if (s == "") - return 0; - if (s.indexOf('x') > 0) { - // is hex number - if (s.length() <= 2) { // exception for "0x" - throw new NumberFormatException("string too short: " + s); - } - if ((s.length() > 10)) { // exception for e.g. 0x112345678 - throw new NumberFormatException("number too large: " + s); - } - // check if string too long (max - return (int) Long.parseLong(s.substring(s.indexOf('x') + 1, s - .length()), 16); - } else { - // is decimal number - return Integer.parseInt(s); - } - } - - public MemoryMap(String pathToMemFile) throws ParserConfigurationException, - SAXException, IOException { - devices = new TreeMap(); - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setValidating(true); - factory.setNamespaceAware(true); - factory.setXIncludeAware(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(new ErrorHandler() { - // ignore fatal errors (an exception is guaranteed) - public void fatalError(SAXParseException exception) - throws SAXException { - } - - // treat validation errors as fatal error - public void error(SAXParseException e) throws SAXParseException { - throw e; - } - - // treat warnings as fatal error - public void warning(SAXParseException e) throws SAXParseException { - throw e; - } - }); - Document document = builder.parse(new File(pathToMemFile)); - NodeList list = document.getElementsByTagName(E_MEMORY_MAP); - if (list == null) { - throw new SAXParseException("<" + E_MEMORY_MAP - + "> element not found", null); - } - list = list.item(0).getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - // Device (REQUIRED+) - System.out.println(list.item(i).getNodeName()); - if (list.item(i).getNodeName().equals(E_DEVICE)) { - Device d = parseDevice(list.item(i)); - devices.put(d.getType(), d); - } - } - } - - private Device parseDevice(Node node) { - NamedNodeMap attributes = node.getAttributes(); - String type = null; - int width = 0; - for (int j = 0; j < attributes.getLength(); j++) { - if (attributes.item(j).getNodeName().equals(A_DEVICE_TYPE)) { - type = attributes.item(j).getNodeValue(); - System.out.println("\tType: " + type); - } else if (attributes.item(j).getNodeName().equals(A_DEVICE_WIDTH)) { - width = parseInt(attributes.item(j).getNodeValue()); - System.out.println("\tWidth: " + width); - } - } - Device d = new Device(type, width); - NodeList children = node.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - System.out.println("\t\t" + children.item(i).getNodeName()); - // ELEMENT attributes (REQUIRED) - // ELEMENT size (OPTIONAL?) - // ELEMENT segment (REQUIRED+) - // ELEMENT init (OPTIONAL) - if (children.item(i).getNodeName().equals(E_ATTRIBUTES)) { - parseAttributes(children.item(i), d.getAttributes()); - } else if (children.item(i).getNodeName().equals(E_SIZE)) { - d.setSize(parseInt(children.item(i).getTextContent())); - } else if (children.item(i).getNodeName().equals(E_SEGMENT)) { - d.segments - .add(parseSegment(children.item(i), d.getAttributes())); - } else if (children.item(i).getNodeName().equals(E_INIT)) { - parseInit(children.item(i)); - } - } - return d; - } - - private void setAttributes(String nodeValue, MemAttributes attributes, - int index) { - if (nodeValue.equals(V_ADD)) { - attributes.set(index); - System.out.println("setAttribute (" + index + "): set: " - + attributes.isSet(index)); - } else if (nodeValue.equals(V_REMOVE)) { - attributes.unset(index); - System.out.println("setAttribute (" + index + "): unset: " - + attributes.isSet(index)); - } - } - - private void parseAttributes(Node node, MemAttributes attributes) { - NamedNodeMap attr = node.getAttributes(); - for (int i = 0; i < attr.getLength(); i++) { - String nodeName = attr.item(i).getNodeName(); - String nodeValue = attr.item(i).getNodeValue(); - System.out.println(nodeName); - if (nodeName.equals(A_MODE)) { - if (nodeValue.equals(V_MODE_REPLACE)) { - // clear all attributes - attributes.reset(); - } - } else if (nodeName.equals(A_READ)) { - setAttributes(nodeValue, attributes, MemAttributes.read); - } else if (nodeName.equals(A_WRITE)) { - setAttributes(nodeValue, attributes, MemAttributes.write); - } else if (nodeName.equals(A_CONST)) { - setAttributes(nodeValue, attributes, MemAttributes.const_); - } else if (nodeName.equals(A_CODE)) { - setAttributes(nodeValue, attributes, MemAttributes.code); - } else if (nodeName.equals(A_VAR)) { - setAttributes(nodeValue, attributes, MemAttributes.var); - } else if (nodeName.equals(A_SYSCONST)) { - setAttributes(nodeValue, attributes, MemAttributes.sysconst); - } else if (nodeName.equals(A_HEAP)) { - setAttributes(nodeValue, attributes, MemAttributes.heap); - } else if (nodeName.equals(A_STACK)) { - setAttributes(nodeValue, attributes, MemAttributes.stack); - } - } - } - - private int convertToNumber(String constant) { - int result = -1; - try { - return parseInt(constant); - } catch (NumberFormatException e) { - // TODO: convert constant to number - System.out.println("setBase: Kernel Constant: " + constant); - } - return result; - } - - private Segment parseSegment(Node node, MemAttributes attributes) { - // ATTRIBUTE name (REQUIRED) TODO - // ELEMENT attributes (OPTIONAL?) - // ELEMENT base (REQUIRED) - // ELEMENT size (REQUIRED) - // ELEMENT subsegment (OPTIONAL*) - // ELEMENT subsegmentList (OPTIONAL?) - NamedNodeMap attrMap = node.getAttributes(); - String name = ""; - for (int i = 0; i < attrMap.getLength(); i++) { - if (attrMap.item(i).getNodeName().equals(A_NAME)) { - name = attrMap.item(i).getNodeValue(); - // TODO remove - System.out.println("-> Segment: name: " + name); - } - } - MemAttributes attr = attributes.clone(); - Segment s = new Segment(name, attr); - NodeList children = node.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - if (children.item(i).getNodeName().equals(E_ATTRIBUTES)) { - parseAttributes(children.item(i), attr); - } else if (children.item(i).getNodeName().equals(E_BASE)) { - s.setBase(convertToNumber(children.item(i).getTextContent())); - } else if (children.item(i).getNodeName().equals(E_SIZE)) { - s.setSize(convertToNumber(children.item(i).getTextContent())); - } else if (children.item(i).getNodeName().equals(E_SUBSEGMENT)) { - s.add(parseSegment(children.item(i), attr)); - } else if (children.item(i).getNodeName().equals(E_SUBSEGMENTLIST)) { - parseSegmentList(s, children.item(i), attr); - } - } - return s; - } - - private void parseSegmentList(Segment rootSegment, Node segmentList, - MemAttributes attributes) { - String name = ""; - int nofEntries = 0, startID = 0, size = 0; - MemAttributes attr = rootSegment.getMemAttributes().clone(); - NamedNodeMap attrMap = segmentList.getAttributes(); - for (int i = 0; i < attrMap.getLength(); i++) { - if (attrMap.item(i).getNodeName().equals(A_NAME)) { - name = attrMap.item(i).getNodeValue(); - } else if (attrMap.item(i).getNodeName() - .equals(A_NUMBER_OF_ENTRIES)) { - nofEntries = parseInt(attrMap.item(i).getNodeValue()); - } else if (attrMap.item(i).getNodeName().equals(A_START_ID)) { - startID = parseInt(attrMap.item(i).getNodeValue()); - } - } - NodeList children = segmentList.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - if (children.item(i).getNodeName().equals(E_ATTRIBUTES)) { - parseAttributes(children.item(i), attr); - } else if (children.item(i).getNodeName().equals(E_SIZE)) { - size = parseInt(children.item(i).getTextContent()); - } - } - for (int i = 0; i < nofEntries; i++) { - Segment s = new Segment(new String(name - + Integer.toString(startID + i)), attr); - s.setSize(size); - rootSegment.add(s); - } - } - - private void parseInit(Node node) { - NodeList children = node.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - if (children.item(i).getNodeName().equals(E_ASSIGNMENT)) { - NamedNodeMap attr = children.item(i).getAttributes(); - String name = null, type = null, value = null; - for (int j = 0; j < attr.getLength(); j++) { - if (attr.item(j).getNodeName().equals(A_NAME)) { - name = attr.item(j).getNodeValue(); - } else if (attr.item(j).getNodeName().equals(A_TYPE)) { - type = attr.item(j).getNodeValue(); - } - } - value = children.item(i).getTextContent(); - System.out.print("\t\t\t assignment: type = " + type - + ", name = " + name + ", value = "); - if (type.equals(A_TYPE_VALUE)) { - System.out.println("0x" - + Integer.toHexString(parseInt(value))); - } else if (type.equals(A_TYPE_URI)) { - System.out.println(value); - } - } - } - } - - public void printMemMap() { - Collection coll = devices.values(); - System.out.println("*** *** Memory Map *** ***"); - for (Iterator iter = coll.iterator(); iter.hasNext();) { - Device element = (Device) iter.next(); - printTab(0); - System.out.println("Device: " + element.getType() + ", size: 0x" - + Integer.toHexString(element.getSize()) + ", width: " - + element.getWidth()); - for (Iterator segIter = element.segments.iterator(); segIter - .hasNext();) { - Segment seg = (Segment) segIter.next(); - printSegment(1, seg); - } - } - System.out.println("*** *** *** *** *** *** *** ***"); - } - - private void printTab(int count) { - for (int i = 0; i < count; i++) { - System.out.print('\t'); - } - } - - private void printSegment(int indent, Segment seg) { - printTab(indent); - System.out.println("Segment: " + seg.getName() + ", base: 0x" - + Integer.toHexString(seg.getBase()) + ", size: 0x" - + Integer.toHexString(seg.getSize())); - printMemAttributes(indent + 1, seg.getMemAttributes()); - for (Iterator subSegIter = seg.getSegments().iterator(); subSegIter - .hasNext();) { - Segment subseg = (Segment) subSegIter.next(); - printSegment(2, subseg); - } - } - - private void printMemAttributes(int indent, MemAttributes attr) { - printTab(indent); - System.out.print("MemAttributes: "); - for (int i = 0; i < MemAttributes.NOF_ATTRIBUTES; i++) { - if (attr.isSet(i)) { - if (i > 0) { - System.out.print(", "); - } - String type = null; - switch (i) { - case 0: - type = "read"; - break; - case 1: - type = "write"; - break; - case 2: - type = "const"; - break; - case 3: - type = "code"; - break; - case 4: - type = "var"; - break; - case 5: - type = "sysconst"; - break; - case 6: - type = "heap"; - break; - case 7: - type = "stack"; - break; - } - System.out.print(type); - } - } - System.out.println(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/system/memMap/Segment.java b/mcdp/src/ch/ntb/mcdp/system/memMap/Segment.java deleted file mode 100644 index c854514..0000000 --- a/mcdp/src/ch/ntb/mcdp/system/memMap/Segment.java +++ /dev/null @@ -1,60 +0,0 @@ -package ch.ntb.mcdp.system.memMap; - -import java.util.LinkedList; - -public class Segment { - - private LinkedList subsegments; - - private String name; - - private MemAttributes attr; - - private int base = 0; - - private int size = 0; - - Segment(String name) { - this.name = name; - subsegments = new LinkedList(); - attr = new MemAttributes(); - } - - Segment(String name, MemAttributes attr) { - this.name = name; - subsegments = new LinkedList(); - this.attr = attr; - } - - public MemAttributes getMemAttributes() { - return attr; - } - - public void add(Segment s) { - subsegments.add(s); - } - - public LinkedList getSegments() { - return subsegments; - } - - public int getBase() { - return base; - } - - public void setBase(int base) { - this.base = base; - } - - public int getSize() { - return size; - } - - public void setSize(int size) { - this.size = size; - } - - public String getName() { - return name; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/system/memMap/test/MemoryMapTest.java b/mcdp/src/ch/ntb/mcdp/system/memMap/test/MemoryMapTest.java deleted file mode 100644 index 13ff03d..0000000 --- a/mcdp/src/ch/ntb/mcdp/system/memMap/test/MemoryMapTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.ntb.mcdp.system.memMap.test; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.xml.sax.SAXException; - -import ch.ntb.mcdp.system.memMap.MemoryMap; - -public class MemoryMapTest { - - private static String filePath = "resources/targets/mpc555/memoryMap.xml"; - - public static void main(String[] args) { - MemoryMap map = null; - try { - map = new MemoryMap(filePath); - } catch (ParserConfigurationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.out.println("done"); - map.printMemMap(); - } - -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/Uart.java b/mcdp/src/ch/ntb/mcdp/uart/Uart.java deleted file mode 100644 index 9c181f6..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/Uart.java +++ /dev/null @@ -1,58 +0,0 @@ -package ch.ntb.mcdp.uart; - -import java.io.InputStream; -import java.io.OutputStream; - -public abstract class Uart { - - private UartOutputStream out; - - UartInputStream in; - - Uart() { - UartDispatch.getUartList().add(this); - out = new UartOutputStream(getSTYPE_IN()); - in = new UartInputStream(); - // if the read-Thread is already started, this statement has no effect - UartDispatch.start(); - } - - /** - * Get the stream to write to the target device. - * - * @return OutputStream to write to target device - */ - public OutputStream getOutputStream() { - return out; - } - - /** - * Get the stream to read from the target device. - * - * @return InputStream to read from target device - */ - public InputStream getInputStream() { - return in; - } - - /** - * The packet subtype specified for this UART packet (from target to PC). - * This constant is defined in Dispatch.h.
- * Note: This direction is different from the input/output direction of the - * streams. - * - * @return packet subtype - */ - abstract byte getSTYPE_OUT(); - - /** - * The packet subtype specified for this UART packet (from PC to target). - * This constant is defined in Dispatch.h.
- * Note: This direction is different from the input/output direction of the - * streams. - * - * @return packet subtype - */ - abstract byte getSTYPE_IN(); - -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/Uart0.java b/mcdp/src/ch/ntb/mcdp/uart/Uart0.java deleted file mode 100644 index a51c0e5..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/Uart0.java +++ /dev/null @@ -1,26 +0,0 @@ -package ch.ntb.mcdp.uart; - - -public class Uart0 extends Uart { - - // UART 0 Subtypes - /** - * Data to UART 0 - */ - private static final byte STYPE_UART_0_IN = 0x11; - - /** - * Data from UART 0 - */ - private static final byte STYPE_UART_0_OUT = 0x22; - - @Override - protected byte getSTYPE_OUT() { - return STYPE_UART_0_OUT; - } - - @Override - protected byte getSTYPE_IN() { - return STYPE_UART_0_IN; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/UartDispatch.java b/mcdp/src/ch/ntb/mcdp/uart/UartDispatch.java deleted file mode 100644 index 24d8b96..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/UartDispatch.java +++ /dev/null @@ -1,137 +0,0 @@ -package ch.ntb.mcdp.uart; - -import java.util.Iterator; -import java.util.LinkedList; - -import ch.ntb.mcdp.usb.DataPacket; -import ch.ntb.mcdp.usb.Dispatch; -import ch.ntb.mcdp.usb.DispatchException; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; -import ch.ntb.usb.USBTimeoutException; - -public class UartDispatch { - - /** - * Size of the UART buffer on the USB controller.
- * This value is specified in UART_BUF_LEN in the file - * uart.h. - */ - public static final int UART_BUF_LEN = 256; - - private static boolean running = false; - - private static Thread dispatchThread; - - private static LinkedList uarts = new LinkedList(); - - /** - * Starts the read thread for all Uarts. If the thread is already running, - * no action is taken. - */ - public static void start() { - if (dispatchThread == null) { - dispatchThread = new Thread() { - @Override - public void run() { - while (running) { - DataPacket data; - try { - data = Dispatch.readUART(); - if (data != null) { - Iterator iterator = uarts.iterator(); - while (iterator.hasNext()) { - Uart uartObj = (Uart) iterator.next(); - if (uartObj.getSTYPE_OUT() == data.subtype) { - uartObj.in.bufferList.add(data); - } - } - } - // TODO: remove - sleep(200); - } catch (USBTimeoutException e) { - // ignore TimeoutExceptions - } catch (USBException e) { - // TODO: Exceptionhandling - e.printStackTrace(); - try { - sleep(2000); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } - } catch (DispatchException e) { - // TODO: Exceptionhandling - e.printStackTrace(); - try { - sleep(2000); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } - } catch (InterruptedException e) { - // TODO Exceptionhandling - e.printStackTrace(); - } - } - } - }; - } - if (!running) { - running = true; - dispatchThread.start(); - } - } - - /** - * Stops the Uart read-Thread. - */ - public static void stop() { - running = false; - } - - /** - * Check whether the read-Thread is still running. - * - * @return state of the read-Thread - */ - public static boolean isRunning() { - return running; - } - - /** - * Get the LinkedList which contains all Uart-objects. - * - * @return The LinkedList containing all Uart-objects. - */ - public static LinkedList getUartList() { - return uarts; - } - - /** - * Write a Uart data-packet to the target. The maximal number of bytes is - * specified by MAX_UART_PAYLOAD. If more data is sent in - * one packet, only MAX_UART_PAYLOAD bytes are forwarded to - * the uart. - * - * @param packetSubType - * The Subtype specified in Dispatch.h. - * @param data - * The data to be sent. - * @param len - * Length of the data to be sent. - * @throws USBException - */ - protected static void write(byte packetSubType, byte[] data, int len) - throws USBException { - byte[] usbData = new byte[len + DataPacket.PACKET_MIN_LENGTH]; - usbData[0] = DataPacket.PACKET_HEADER; - usbData[1] = Dispatch.MTYPE_UART; - usbData[2] = packetSubType; - usbData[3] = (byte) (len / 0x100); - usbData[4] = (byte) (len & 0xFF); - for (int i = 0; i < len; i++) { - usbData[DataPacket.PACKET_DATA_OFFSET + i] = data[i]; - } - usbData[DataPacket.PACKET_DATA_OFFSET + len] = DataPacket.PACKET_END; - USBDevice.write_BDI(usbData, usbData.length); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/UartInputStream.java b/mcdp/src/ch/ntb/mcdp/uart/UartInputStream.java deleted file mode 100644 index 8ab1851..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/UartInputStream.java +++ /dev/null @@ -1,75 +0,0 @@ -package ch.ntb.mcdp.uart; - -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedList; - -import ch.ntb.mcdp.usb.DataPacket; - -public class UartInputStream extends InputStream { - - private int bufferPos = 0; - - LinkedList bufferList = new LinkedList(); - - @Override - public int read() throws IOException { - while (!bufferList.isEmpty()) { - if (bufferPos >= bufferList.element().data.length) { - // remove element, reset bufferPos - bufferList.remove(); - bufferPos = 0; - } else { - return bufferList.element().data[bufferPos++]; - } - } - return -1; - } - - @Override - public int read(byte b[]) throws IOException { - return read(b, 0, b.length); - } - - @Override - public int read(byte b[], int off, int len) throws IOException { - if (b == null) { - throw new NullPointerException(); - } else if ((off < 0) || (off > b.length) || (len < 0) - || ((off + len) > b.length) || ((off + len) < 0)) { - throw new IndexOutOfBoundsException(); - } else if (len == 0) { - return 0; - } - - // TODO: optimize - int c = read(); - if (c == -1) { - return -1; - } - b[off] = (byte) c; - - int i = 1; - try { - for (; i < len; i++) { - c = read(); - if (c == -1) { - break; - } - if (b != null) { - b[off + i] = (byte) c; - } - } - } catch (IOException ee) { - } - return i; - } - - @Override - public int available() throws IOException { - if (bufferList.isEmpty()) - return 0; - return bufferList.element().data.length; - } - -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/UartOutputStream.java b/mcdp/src/ch/ntb/mcdp/uart/UartOutputStream.java deleted file mode 100644 index a88fdba..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/UartOutputStream.java +++ /dev/null @@ -1,52 +0,0 @@ -package ch.ntb.mcdp.uart; - -import java.io.IOException; -import java.io.OutputStream; - -import ch.ntb.usb.USBException; - -public class UartOutputStream extends OutputStream { - - private byte packetSubType; - - UartOutputStream(byte packetSubType) { - this.packetSubType = packetSubType; - } - - @Override - public void write(int b) throws IOException { - byte[] data = new byte[1]; - data[0] = (byte) b; - try { - UartDispatch.write(packetSubType, data, 1); - } catch (USBException e) { - throw new IOException(e.getMessage()); - } - } - - @Override - public void write(byte b[], int off, int len) throws IOException { - if (b == null) { - throw new NullPointerException(); - } else if ((off < 0) || (off > b.length) || (len < 0) - || ((off + len) > b.length) || ((off + len) < 0)) { - throw new IndexOutOfBoundsException(); - } else if (len == 0) { - return; - } - int newLen = 0; - do { - newLen = Math.min(len, UartDispatch.UART_BUF_LEN); - byte[] data = new byte[newLen]; - for (int i = 0; i < newLen; i++) { - data[i] = b[off + i]; - } - try { - UartDispatch.write(packetSubType, data, newLen); - } catch (USBException e) { - throw new IOException(e.getMessage()); - } - len -= newLen; - } while (len > UartDispatch.UART_BUF_LEN); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java b/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java deleted file mode 100644 index 5ebb1ac..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java +++ /dev/null @@ -1,72 +0,0 @@ -package ch.ntb.mcdp.uart.blackbox; - -import ch.ntb.mcdp.uart.UartDispatch; -import ch.ntb.mcdp.usb.DataPacket; -import ch.ntb.mcdp.usb.Dispatch; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class Uart0 { - - // UART 0 Subtypes - /** - * Data to UART 0 - */ - private static final byte STYPE_UART_0_IN = 0x11; - - public static final int MAX_UART_PAYLOAD = UartDispatch.UART_BUF_LEN; - - private static void write(byte packetSubType, byte[] data, int len) - throws USBException { - byte[] usbData = new byte[len + DataPacket.PACKET_MIN_LENGTH]; - usbData[0] = DataPacket.PACKET_HEADER; - usbData[1] = Dispatch.MTYPE_UART; - usbData[2] = packetSubType; - usbData[3] = (byte) (len / 0x100); - usbData[4] = (byte) (len & 0xFF); - for (int i = 0; i < len; i++) { - usbData[DataPacket.PACKET_DATA_OFFSET + i] = data[i]; - } - usbData[DataPacket.PACKET_DATA_OFFSET + len] = DataPacket.PACKET_END; - USBDevice.write_BDI(usbData, usbData.length); - } - - /** - * Write a Uart data-packet to the target. The maximal number of bytes is - * specified by MAX_UART_PAYLOAD. If more data is sent in - * one packet, only MAX_UART_PAYLOAD bytes are forwarded to - * the uart. - * - * @param data - * The data to be sent. - * @param len - * Length of the data to be sent. - * @return true if the data has been sent successfully - */ - public static boolean write(byte[] data, int len) { - try { - write(STYPE_UART_0_IN, data, len); - } catch (USBException e) { - return false; - } - return true; - } - - /** - * Try to read uart data from the device. - * - * @return uart data or null if no data is available or an exception occured - */ - public static byte[] read() { - DataPacket packet; - try { - packet = Dispatch.readUART(); - if (packet == null) { - return null; - } - return packet.data; - } catch (Exception e) { - return null; - } - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTest.java b/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTest.java deleted file mode 100644 index d248bc8..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package ch.ntb.mcdp.uart.blackbox.test; - -import ch.ntb.mcdp.uart.UartDispatch; -import ch.ntb.mcdp.uart.blackbox.Uart0; - -public class UartTest { - - static Thread reader; - - public static void init() { - - reader = new Thread() { - public void run() { - while (true) { - try { - byte[] result = Uart0.read(); - if (result != null) { - for (int i = 0; i < result.length; i++) { - System.out.print((char) result[i]); - } - } - sleep(20); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - }; - reader.start(); - } - - static public void button1() { - byte[] buffer = new byte[UartDispatch.UART_BUF_LEN]; - for (int i = 0; i < buffer.length; i++) { - buffer[i] = (byte) ('0' + (i % ('z' - '0'))); - } - boolean done = Uart0.write(buffer, buffer.length); - if (done) { - System.out.println("success"); - } else { - System.out.println("failed"); - } - } - - static public void button2() { - - } - - static public void button3() { - - } - - static public void button4() { - - } - - static public void button5() { - - } - - static public void button6() { - - } - - static public void button7() { - - } - - static public void button8() { - - } - - static public void button9() { - - } - - static public void button10() { - - } - - static public void button11() { - - } - - static public void button12() { - - } - - static public void button13() { - - } - - static public void button14() { - - } - - static public void button15() { - - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTestApp.java b/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTestApp.java deleted file mode 100644 index e084440..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/blackbox/test/UartTestApp.java +++ /dev/null @@ -1,215 +0,0 @@ -package ch.ntb.mcdp.uart.blackbox.test; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -import ch.ntb.mcdp.uart.UartDispatch; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class UartTestApp { - - private Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10" - - private Button button1 = null; - - private Button button2 = null; - - private Button button3 = null; - - private Button button4 = null; - - private Button button5 = null; - - private Button button6 = null; - - private Button button7 = null; - - private Button button8 = null; - - private Button button9 = null; - - private Button button10 = null; - - private Button button15 = null; - - private Button button11 = null; - - private Button button12 = null; - - private Button button13 = null; - - private Button button14 = null; - - /** - * This method initializes sShell - */ - private void createSShell() { - sShell = new Shell(); - sShell.setText("Shell"); - sShell.setLayout(new RowLayout()); - sShell.setSize(new org.eclipse.swt.graphics.Point(312,110)); - button1 = new Button(sShell, SWT.NONE); - button1.setText("writeData"); - button1 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button1(); - } - }); - button2 = new Button(sShell, SWT.NONE); - button2.setText("not assigned"); - button2 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button2(); - } - }); - button3 = new Button(sShell, SWT.NONE); - button3.setText("not assigned"); - button3 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button3(); - } - }); - button4 = new Button(sShell, SWT.NONE); - button4.setText("not assigned"); - button4 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button4(); - } - }); - button5 = new Button(sShell, SWT.NONE); - button5.setText("not assigned"); - button6 = new Button(sShell, SWT.NONE); - button6.setText("not assigned"); - button6 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button6(); - } - }); - button7 = new Button(sShell, SWT.NONE); - button7.setText("not assigned"); - button8 = new Button(sShell, SWT.NONE); - button8.setText("not assigned"); - button8 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button8(); - } - }); - button9 = new Button(sShell, SWT.NONE); - button9.setText("not assigned"); - button10 = new Button(sShell, SWT.NONE); - button10.setText("not assigned"); - button11 = new Button(sShell, SWT.NONE); - button11.setText("not assigned"); - button11.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button11(); - } - }); - button12 = new Button(sShell, SWT.NONE); - button12.setText("not assigned"); - button12.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button12(); - } - }); - button13 = new Button(sShell, SWT.NONE); - button13.setText("not assigned"); - button13.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button13(); - } - }); - button14 = new Button(sShell, SWT.NONE); - button14.setText("not assigned"); - button14.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button14(); - } - }); - button15 = new Button(sShell, SWT.NONE); - button15.setText("not assigned"); - button15.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button15(); - } - }); - button10 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button10(); - } - }); - button9 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button9(); - } - }); - button7 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button7(); - } - }); - button5 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button5(); - } - }); - } - - public static void main(String[] args) { - UartTestApp app = new UartTestApp(); - app.createSShell(); - app.sShell.open(); - - Display display = app.sShell.getDisplay(); - - try { - USBDevice.open(); - System.out.println("open device..."); - } catch (USBException e) { - e.printStackTrace(); - return; - } - UartTest.init(); - - while (!app.sShell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); - } - } - - UartDispatch.stop(); - - try { - USBDevice.close(); - System.out.println("closing device..."); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.exit(0); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/test/UartTest.java b/mcdp/src/ch/ntb/mcdp/uart/test/UartTest.java deleted file mode 100644 index 14b64c8..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/test/UartTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package ch.ntb.mcdp.uart.test; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import ch.ntb.mcdp.uart.Uart0; -import ch.ntb.mcdp.uart.UartDispatch; - -public class UartTest { - - static Thread reader; - - static OutputStream out; - - static InputStream in; - - static byte[] buffer = new byte[UartDispatch.UART_BUF_LEN]; - - public static void init() { - - // create an uart object - Uart0 uart = new Uart0(); - // get the streams - out = uart.getOutputStream(); - in = uart.getInputStream(); - - reader = new Thread() { - public void run() { - int readLen = 0; - while (true) { - try { - readLen = in.read(buffer); - if (readLen > 0) { - for (int i = 0; i < readLen; i++) { - System.out.print((char) buffer[i]); - } - } - Thread.sleep(50); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - }; - reader.start(); - } - - static public void button1() { - byte[] buffer = new byte[UartDispatch.UART_BUF_LEN]; - for (int i = 0; i < buffer.length; i++) { - buffer[i] = (byte) ('0' + (i % ('z' - '0'))); - } - try { - out.write(buffer); - } catch (IOException e) { - e.printStackTrace(); - } - } - - static public void button2() { - - } - - static public void button3() { - - } - - static public void button4() { - - } - - static public void button5() { - - } - - static public void button6() { - - } - - static public void button7() { - - } - - static public void button8() { - - } - - static public void button9() { - - } - - static public void button10() { - - } - - static public void button11() { - - } - - static public void button12() { - - } - - static public void button13() { - - } - - static public void button14() { - - } - - static public void button15() { - - } -} diff --git a/mcdp/src/ch/ntb/mcdp/uart/test/UartTestApp.java b/mcdp/src/ch/ntb/mcdp/uart/test/UartTestApp.java deleted file mode 100644 index c8cc744..0000000 --- a/mcdp/src/ch/ntb/mcdp/uart/test/UartTestApp.java +++ /dev/null @@ -1,216 +0,0 @@ -package ch.ntb.mcdp.uart.test; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -import ch.ntb.mcdp.uart.UartDispatch; -import ch.ntb.mcdp.usb.USBDevice; -import ch.ntb.usb.USBException; - -public class UartTestApp { - - private Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10" - - private Button button1 = null; - - private Button button2 = null; - - private Button button3 = null; - - private Button button4 = null; - - private Button button5 = null; - - private Button button6 = null; - - private Button button7 = null; - - private Button button8 = null; - - private Button button9 = null; - - private Button button10 = null; - - private Button button15 = null; - - private Button button11 = null; - - private Button button12 = null; - - private Button button13 = null; - - private Button button14 = null; - - /** - * This method initializes sShell - */ - private void createSShell() { - sShell = new Shell(); - sShell.setText("Shell"); - sShell.setLayout(new RowLayout()); - sShell.setSize(new org.eclipse.swt.graphics.Point(312,110)); - button1 = new Button(sShell, SWT.NONE); - button1.setText("writeData"); - button1 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button1(); - } - }); - button2 = new Button(sShell, SWT.NONE); - button2.setText("not assigned"); - button2 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button2(); - } - }); - button3 = new Button(sShell, SWT.NONE); - button3.setText("not assigned"); - button3 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button3(); - } - }); - button4 = new Button(sShell, SWT.NONE); - button4.setText("not assigned"); - button4 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button4(); - } - }); - button5 = new Button(sShell, SWT.NONE); - button5.setText("not assigned"); - button6 = new Button(sShell, SWT.NONE); - button6.setText("not assigned"); - button6 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button6(); - } - }); - button7 = new Button(sShell, SWT.NONE); - button7.setText("not assigned"); - button8 = new Button(sShell, SWT.NONE); - button8.setText("not assigned"); - button8 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button8(); - } - }); - button9 = new Button(sShell, SWT.NONE); - button9.setText("not assigned"); - button10 = new Button(sShell, SWT.NONE); - button10.setText("not assigned"); - button11 = new Button(sShell, SWT.NONE); - button11.setText("not assigned"); - button11.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button11(); - } - }); - button12 = new Button(sShell, SWT.NONE); - button12.setText("not assigned"); - button12.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button12(); - } - }); - button13 = new Button(sShell, SWT.NONE); - button13.setText("not assigned"); - button13.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button13(); - } - }); - button14 = new Button(sShell, SWT.NONE); - button14.setText("not assigned"); - button14.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button14(); - } - }); - button15 = new Button(sShell, SWT.NONE); - button15.setText("not assigned"); - button15.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - UartTest.button15(); - } - }); - button10 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button10(); - } - }); - button9 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button9(); - } - }); - button7 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button7(); - } - }); - button5 - .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { - public void widgetSelected( - org.eclipse.swt.events.SelectionEvent e) { - UartTest.button5(); - } - }); - } - - public static void main(String[] args) { - UartTestApp app = new UartTestApp(); - app.createSShell(); - app.sShell.open(); - - Display display = app.sShell.getDisplay(); - - try { - USBDevice.open(); - System.out.println("open device..."); - } catch (USBException e) { - e.printStackTrace(); - return; - } - UartDispatch.start(); - UartTest.init(); - - while (!app.sShell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); - } - } - - UartDispatch.stop(); - - try { - USBDevice.close(); - System.out.println("closing device..."); - } catch (USBException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.exit(0); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/usb/DataPacket.java b/mcdp/src/ch/ntb/mcdp/usb/DataPacket.java deleted file mode 100644 index 3a856f7..0000000 --- a/mcdp/src/ch/ntb/mcdp/usb/DataPacket.java +++ /dev/null @@ -1,45 +0,0 @@ -package ch.ntb.mcdp.usb; - -public class DataPacket { - - /** - * minimal Length of a packet (no payload) - */ - public static final int PACKET_MIN_LENGTH = 6; - - public int subtype; - - public byte[] data; - - /** - * offset to the first byte of data - */ - public static final byte PACKET_DATA_OFFSET = 5; - - /** - * last byte of packet - */ - public static final byte PACKET_END = 0x1F; - - // Packet Constants - /** - * first byte of header - */ - public static final byte PACKET_HEADER = 0x5B; - - DataPacket(int subtype, byte[] data) { - this.subtype = subtype; - this.data = data; - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer("Subtype: 0x" - + String.format("%1$02X", subtype) + "\t"); - sb.append("Data: "); - for (int i = 0; i < data.length; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - return sb.toString(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/usb/Dispatch.java b/mcdp/src/ch/ntb/mcdp/usb/Dispatch.java deleted file mode 100644 index 63b7c56..0000000 --- a/mcdp/src/ch/ntb/mcdp/usb/Dispatch.java +++ /dev/null @@ -1,138 +0,0 @@ -package ch.ntb.mcdp.usb; - -import java.util.LinkedList; -import java.util.logging.Logger; - -import ch.ntb.mcdp.utils.logger.LogUtil; -import ch.ntb.usb.USB; -import ch.ntb.usb.USBException; - -public class Dispatch { - - private static Logger logger = LogUtil.ch_ntb_mcdp_usb; - - // Main Types - /** - * general errors - */ - public static final byte MTYPE_ERROR = 0x01; - - /** - * BDI specific packets - */ - public static final byte MTYPE_BDI = 0x02; - - /** - * UART specific packets - */ - public static final byte MTYPE_UART = 0x03; - - // Sub Types - // ERRORS - /** - * Unknown MTYPE - */ - public static final byte STYPE_ERROR_UNKNOWN_MTYPE = 0x70; - - /** - * Header of packet wrong - */ - public static final byte STYPE_ERROR_HEADER = 0x71; - - /** - * Packet end wrong - */ - public static final byte STYPE_ERROR_PACKET_END = 0x72; - - private static byte[] usbData = new byte[USB.HIGHSPEED_MAX_BULK_PACKET_SIZE]; - - private static LinkedList bdiData, uartData; - - static { - bdiData = new LinkedList(); - uartData = new LinkedList(); - } - - public static void emptyBuffers() { - bdiData.clear(); - uartData.clear(); - } - - private static void dispatch(byte[] data, int size) - throws DispatchException { - int index = 0, mainType, subtype; - byte[] packetData; - while (index < size) { - if (data[index++] != DataPacket.PACKET_HEADER) { - throw new DispatchException("PACKET_HEADER wrong: " - + data[index - 1]); - } - mainType = data[index++]; - subtype = data[index++]; - int dataLen = (data[index++] & 0xFF) * 0x100 - + (data[index++] & 0xFF); - if (data[index + dataLen] != DataPacket.PACKET_END) { - throw new DispatchException("PACKET_END or packetLen (" - + dataLen + " bytes) wrong"); - } - - switch (mainType) { - case MTYPE_ERROR: - switch (subtype) { - case STYPE_ERROR_HEADER: - throw new DispatchException( - "MTYPE_ERROR: STYPE_ERROR_HEADER"); - case STYPE_ERROR_PACKET_END: - throw new DispatchException( - "MTYPE_ERROR: STYPE_ERROR_PACKET_END"); - case STYPE_ERROR_UNKNOWN_MTYPE: - throw new DispatchException( - "MTYPE_ERROR: STYPE_ERROR_UNKNOWN_MTYPE"); - default: - throw new DispatchException("MTYPE_ERROR: Unknown S_TYPE: " - + subtype); - } - case MTYPE_BDI: - packetData = new byte[dataLen]; - // copy data to bdiData - for (int i = 0; i < dataLen; i++) { - packetData[i] = data[index + i]; - } - bdiData.add(new DataPacket(subtype, packetData)); - break; - case MTYPE_UART: - packetData = new byte[dataLen]; - // copy data to uartData - for (int i = 0; i < dataLen; i++) { - packetData[i] = data[index + i]; - } - uartData.add(new DataPacket(subtype, packetData)); - break; - default: - throw new DispatchException("Unknown MTYPE: " + mainType); - } - index += dataLen + 1; - } - } - - public static DataPacket readBDI() throws USBException, DispatchException { - if (!bdiData.isEmpty()) { - return bdiData.poll(); - } - int dataLength = USBDevice.read_BDI(usbData, USBDevice - .getMaxPacketSize()); - dispatch(usbData, dataLength); - return bdiData.poll(); - } - - public static DataPacket readUART() throws USBException, DispatchException { - if (!uartData.isEmpty()) { - logger.info("buffer not empty"); - return uartData.poll(); - } - int dataLength = USBDevice.read_UART(usbData, USBDevice - .getMaxPacketSize()); - dispatch(usbData, dataLength); - return uartData.poll(); - } -} diff --git a/mcdp/src/ch/ntb/mcdp/usb/DispatchException.java b/mcdp/src/ch/ntb/mcdp/usb/DispatchException.java deleted file mode 100644 index 13697c7..0000000 --- a/mcdp/src/ch/ntb/mcdp/usb/DispatchException.java +++ /dev/null @@ -1,14 +0,0 @@ -package ch.ntb.mcdp.usb; - -public class DispatchException extends Exception{ - - public DispatchException(String string) { - super(string); - } - - /** - * - */ - private static final long serialVersionUID = -3507511795478700742L; - -} diff --git a/mcdp/src/ch/ntb/mcdp/usb/USBDevice.java b/mcdp/src/ch/ntb/mcdp/usb/USBDevice.java deleted file mode 100644 index 005b795..0000000 --- a/mcdp/src/ch/ntb/mcdp/usb/USBDevice.java +++ /dev/null @@ -1,73 +0,0 @@ -package ch.ntb.mcdp.usb; - -import ch.ntb.usb.Device; -import ch.ntb.usb.USB; -import ch.ntb.usb.USBException; - -public class USBDevice { - - private final static short IdVendor = (short) 0x8235; - - private final static short IdProduct = 0x0100; - - private final static int Configuration = 1; - - private final static int Interface = 0; - - private final static int Altinterface = 0; - - private static final int OUT_Endpoint_BDI = 0x02; - - private static final int IN_Endpoint_BDI = 0x86; - - private static final int OUT_Endpoint_UART = 0x04; - - private static final int IN_Endpoint_UART = 0x88; - - private static final int BDI_Timeout = 1000; - - private static final int UART_Timeout = 1; - - private static Device dev; - - static { - dev = USB.getDevice(IdVendor, IdProduct); - dev.setResetOnFirstOpen(true); - } - - public static void open() throws USBException { - dev.open(Configuration, Interface, Altinterface); - } - - public static void close() throws USBException { - dev.close(); - } - - public static void reset() throws USBException { - dev.reset(); - } - - public static void write_BDI(byte[] data, int length) throws USBException { - dev.bulkwrite(OUT_Endpoint_BDI, data, length, BDI_Timeout, true); - } - - public static int read_BDI(byte[] data, int size) throws USBException { - return dev.bulkread(IN_Endpoint_BDI, data, size, BDI_Timeout, true); - } - - public static void write_UART(byte[] data, int length) throws USBException { - dev.bulkwrite(OUT_Endpoint_UART, data, length, UART_Timeout, false); - } - - public static int read_UART(byte[] data, int size) throws USBException { - return dev.bulkread(IN_Endpoint_UART, data, size, UART_Timeout, false); - } - - public static int getMaxPacketSize() { - return dev.getMaxPacketSize(); - } - - public static Device getDevice() { - return dev; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/utils/Redirect.java b/mcdp/src/ch/ntb/mcdp/utils/Redirect.java deleted file mode 100644 index c632587..0000000 --- a/mcdp/src/ch/ntb/mcdp/utils/Redirect.java +++ /dev/null @@ -1,17 +0,0 @@ -package ch.ntb.mcdp.utils; - -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.PrintStream; - -public class Redirect { - - public static void redirect(){ - try { - System.setOut(new PrintStream(new FileOutputStream("JavaOut.txt"))); - System.setErr(new PrintStream(new FileOutputStream("JavaErr.txt"))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } -} diff --git a/mcdp/src/ch/ntb/mcdp/utils/logger/LogLevel.java b/mcdp/src/ch/ntb/mcdp/utils/logger/LogLevel.java deleted file mode 100644 index 2dccc77..0000000 --- a/mcdp/src/ch/ntb/mcdp/utils/logger/LogLevel.java +++ /dev/null @@ -1,13 +0,0 @@ -package ch.ntb.mcdp.utils.logger; - -import java.util.logging.Level; - -public class LogLevel extends Level { - - public static final Level DEBUG = new LogLevel("DEBUG", 750); - - protected LogLevel(String name, int value) { - super(name, value); - } - -} diff --git a/mcdp/src/ch/ntb/mcdp/utils/logger/LogUtil.java b/mcdp/src/ch/ntb/mcdp/utils/logger/LogUtil.java deleted file mode 100644 index a44d9e8..0000000 --- a/mcdp/src/ch/ntb/mcdp/utils/logger/LogUtil.java +++ /dev/null @@ -1,48 +0,0 @@ -package ch.ntb.mcdp.utils.logger; - -import java.util.logging.ConsoleHandler; -import java.util.logging.Handler; -import java.util.logging.Level; - -public class LogUtil { - - public static McdpLogger ch_ntb_mcdp_bdi, ch_ntb_mcdp_bdi_test, - ch_ntb_mcdp_mc68332, ch_ntb_mcdp_usb; - - static { - // set all loglevels here - ch_ntb_mcdp_usb = getLogger("ch.ntb.mcdp.usb", LogLevel.OFF); - - ch_ntb_mcdp_bdi = getLogger("ch.ntb.mcdp.bdi", LogLevel.OFF); - - ch_ntb_mcdp_bdi_test = getLogger("ch.ntb.mcdp.bdi.test", LogLevel.ALL); - - ch_ntb_mcdp_mc68332 = getLogger("ch.ntb.mcdp.mc68332", LogLevel.OFF); - } - - public static void setLevel(McdpLogger logger, Level loglevel) { - Handler[] h = logger.getHandlers(); - for (int i = 0; i < h.length; i++) { - h[i].setLevel(loglevel); - } - logger.setLevel(loglevel); - } - - private static void initLevel(McdpLogger logger, Level loglevel) { - Handler[] h = logger.getHandlers(); - for (int i = 0; i < h.length; i++) { - logger.removeHandler(h[i]); - } - Handler console = new ConsoleHandler(); - console.setLevel(loglevel); - logger.addHandler(console); - logger.setLevel(loglevel); - logger.setUseParentHandlers(false); - } - - private static McdpLogger getLogger(String name, Level loglevel) { - McdpLogger logger = McdpLogger.getLogger(name); - initLevel(logger, loglevel); - return logger; - } -} diff --git a/mcdp/src/ch/ntb/mcdp/utils/logger/McdpLogger.java b/mcdp/src/ch/ntb/mcdp/utils/logger/McdpLogger.java deleted file mode 100644 index 219dd6a..0000000 --- a/mcdp/src/ch/ntb/mcdp/utils/logger/McdpLogger.java +++ /dev/null @@ -1,26 +0,0 @@ -package ch.ntb.mcdp.utils.logger; - -import java.util.logging.Logger; -import java.util.logging.LogManager; - -public class McdpLogger extends Logger { - - protected McdpLogger(String name, String resourceBundleName) { - super(name, resourceBundleName); - } - - public void debug(String msg) { - log(LogLevel.DEBUG, msg); - } - - public static synchronized McdpLogger getLogger(String name) { - LogManager manager = LogManager.getLogManager(); - McdpLogger result = (McdpLogger) manager.getLogger(name); - if (result == null) { - result = new McdpLogger(name, null); - manager.addLogger(result); - result = (McdpLogger) manager.getLogger(name); - } - return result; - } -}