From 21dd40ea5109af35fc3e1ab6a97eca9b0dc95d12 Mon Sep 17 00:00:00 2001 From: schlaepfer Date: Fri, 10 Mar 2006 12:22:50 +0000 Subject: [PATCH] - To68x32, Xo68x32, Toppc, Xoppc + !DevTools deleted -> the code is integrated into the main versions of the 332/555 git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@111 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c --- blackbox/!DevTools.otd | 76 - .../To68x32/Docu/!NTBTarget332DemoTool.odc | Bin 9356 -> 0 bytes blackbox/Toppc/Docu/!NTBTargetPpcDemoTool.odc | Bin 11677 -> 0 bytes blackbox/Xo68x32/Mod/AmdFlashs.otd | 369 ---- blackbox/Xo68x32/Mod/System.otd | 1932 ----------------- blackbox/Xoppc/Mod/AmdFlashs.otd | 369 ---- blackbox/Xoppc/Mod/System.otd | 1839 ---------------- blackbox/Xoppc/Mod/TrgtRegDict.otd | 190 -- 8 files changed, 4775 deletions(-) delete mode 100644 blackbox/!DevTools.otd delete mode 100644 blackbox/To68x32/Docu/!NTBTarget332DemoTool.odc delete mode 100644 blackbox/Toppc/Docu/!NTBTargetPpcDemoTool.odc delete mode 100644 blackbox/Xo68x32/Mod/AmdFlashs.otd delete mode 100644 blackbox/Xo68x32/Mod/System.otd delete mode 100644 blackbox/Xoppc/Mod/AmdFlashs.otd delete mode 100644 blackbox/Xoppc/Mod/System.otd delete mode 100644 blackbox/Xoppc/Mod/TrgtRegDict.otd diff --git a/blackbox/!DevTools.otd b/blackbox/!DevTools.otd deleted file mode 100644 index be31361..0000000 --- a/blackbox/!DevTools.otd +++ /dev/null @@ -1,76 +0,0 @@ -(* USB Dev Tool *) - -(* NOTE: writing permission is needed in this directory to create the files JavaOut.txt and JavaErr.txt! *) - -(* MC68332 & MPC555 *) -¿¿CXdeCmdsDev.CompileThis - UsbBDIDll - UsbBDI - UsbBDI555 - UsbBDI332 - UsbTargLog -¿¿E - -¿¿CDevDebug.UnloadThis - UsbTargLog - UsbBDI555 - UsbBDI332 - UsbBDI - UsbBDIDll -¿¿E - -(* MPC555 only (start BB555) *) -¿¿CXdeCmdsDev.CompileThis - XoppcTrgtRegDict - XoppcAmdFlashs - XoppcSystem -¿¿E - -¿¿CDevDebug.UnloadThis - XoppcSystem - XoppcAmdFlashs - XoppcTrgtRegDict -¿¿E - -(* MC68332 only (start BB332) *) -¿¿CXdeCmdsDev.CompileThis - Xo68x32AmdFlashs - Xo68x32System -¿¿E - -¿¿CDevDebug.UnloadThis - Xo68x32System - Xo68x32AmdFlashs -¿¿E - - -(* MC68332 & MPC555 *) -files of directory: Usb\Mod\ files: * - Usb\Mod\BDI.otd - Usb\Mod\BDI332.otd - Usb\Mod\BDI555.otd - Usb\Mod\BDIDll.otd - Usb\Mod\TargLog.otd - -files of directory: Usb\Rsrc\ files: * - Usb\Rsrc\usbpdi.jar - -files of directory: files: * - BDI.dll - -(* MPC555 only *) -files of directory: Xoppc\Mod\ files: * - Xoppc\Mod\AmdFlashs.otd - Xoppc\Mod\System.otd - Xoppc\Mod\TrgtRegDict.otd - -files of directory: Toppc\Docu\ files: * - Toppc\Docu\!NTBTargetPpcDemoTool.odc - -(* MC68332 only *) -files of directory: Xo68x32\Mod\ files: * - Xo68x32\Mod\AmdFlashs.otd - Xo68x32\Mod\System.otd - -files of directory: To68x32\Docu\ files: * - To68x32\Docu\!NTBTarget332DemoTool.odc diff --git a/blackbox/To68x32/Docu/!NTBTarget332DemoTool.odc b/blackbox/To68x32/Docu/!NTBTarget332DemoTool.odc deleted file mode 100644 index b6054c1fbdd42528b131fee68c73629bd2c24722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9356 zcmd5?%Wot{883Si?@p3Qcm={M)NaE15qskGKG-;6iD$;^HCeA$9&en-3aLF^Gt;=I z+jRG=y;eZcE(Z<~AWldeIOKqkxNv|If*kn^5E2&THoHyuvqbJo3i4?GulX1<6g&f8)hV~$t>y`s1vE{a`oR?LCrkA6?85pF` z;BJKI$5KqH$o8b^0Kl7tz_HveK{@{Yzm14D{y1Wm?5g8!g$4c^4@eeloseiRnQo+n z9xGgG+F@aJTY1I6-w9PPF65V!9l+l~CJ&}y=6E|rT@jLN@*@Q8C zzfG7RPVh#rC~xH3udx%q{pX1IC4wm@%q9P%-GUDfre=PIz-WnYbeoxT@pcC0Sc-U& zGiZqq8^rDyKyJr=z#qbj#Nhj%(vJdr%2@DK^L%%o{+l$Ko&C=x!*Q>JHReN`A9xc{(Ct(c6)>YpOloUiCzfIFddN1JmD*r?z=PiP9)C11qk*(kEFsn~)eK<0Suw^)EC(|ipz|x#HXnIXRoJ%vdjGq$&czpy9IN8BQ za~r!GkBRm!Yx~%9@l-||t%w#%52nk&5=poAZfN^mFRmOTnI2qw=*3(y#+WiZ3Kx3p z-$z1WFdgG2>BFVR;_9tM@Ufra=RsU)B5tR%OB_Z!Z@Q5g^x3S7L_0D5imh(0g+cXZ zDe%Madf?X_R~49YCq*vx(9RmfMDL`AW3VLmAiN&IMelqHYxdxe`wQE{O*L}7Sx}}YX<^_-_+EbwJ+@z0 z?BhC*ZQ$p@0aiVSdA7_hPNSfXG%sRy5QQF&uT`aedt~W${P?JNJtR)~X^9t(E-_<> zc=YHJe|)@voY@XX*d9)#`RP;moam1uF z=>e?^7hao|Np;?gFQ^G?U%;E29!L(;PXgo>OrXpka4L@r^xq1N){+xA5&p*4?LP8 zO_Lm&S=4vlc}G8WBYl;lT%5;JObv)1gSq?m*YrS&X|moPMn4=atERv1`>w3{fxNa} zlVN9p!EZem$_7O}V4o zYD0z6c9g7?mS-x}hUY|47%A6PvUU*2tA5>Tg>`FFc@kGE+KUQuLpc#n*~?zd4`t24 ziN})_kZ?SS!;dWcTP?ZQk~pd3MNb40g?w)AKJ0N)jzH#|e97|efw^sk^12^Hm$eua zaKQsaO9fC(vpFZPE|x=SwQ6{5%H@?((YFFyY9Zx>-|!U0pDg63Ci62#Y%)H}$=6yT zETz1f6^7(If%?Z7@64nek|-8n^cDZY#oe=WAiIs~DJaA@>kTK&=Tb|_Q7mQ*Te%H| zn}uS_aqauStf^2%#wohdulkm~W;JuUF0uxC$p=5#$s8FdP1!tRcJ?K2G;t zakc_~3om>FAFdx1Bzz_@*f47bCTj~TGs{h@uB7&5knsv~F~lYd$id>4a+=%lX$V4J z$2(EHA(Bles;fP}PVfxZL8}jLmt8Atd|ZC{Tw?85maX?a50b$O(H=LI8v{w`Ko5lm5WVF^R?}r#DKx87~3=6 z4t=R+>^gw%Lg~u-jcZHuvW$3VxsgIJY@pW)Y7$s?2f^q7uOsQajzaV-$TFf@+nb>S zRf@s4EYFkQRnoJn4XOQTW+`|-43!L2wGl~|`ww9e5fFqn?jg*3HX}FQiptjzkpXAb z=~}YrTGg$hzbiclm?yIaUTE5eUx9{5)`-@qM3(l-&i!$CrPH_pB=f*9D<>9Ao~S9t zX;>wW%hyYKlR-kH8hQ{@j=beJyZ4;5Xb(>Up$?^xRifD65W;gbG+y`a=y61c)s-2h z2V-TYDK8_c%F*lzbySAiYR{=Tdo)VCw`@g`nUb`=*yGs|f4gI# zaf}|9GneFerQz=oTwb%9DjcV=u|>%(u~~M}W7lV#ZnL;vD#>_jV&Q5BbSJ6!wM(kq zOpw~PP$@tO*QZ(toO{Y{rK{VeRY6V^!|i!_eQmY0SiZ5gDAT+#_57q3>WJAUwP_FO zkaiqv6D!}tpAuP;Tr@Q=m#?iaE-kM07Gz)=V-RXDY-L+JbFjxU37c`EavNU?cjx5` z3$~4~f#Id``SBOPcNzIRywp=|a$8Z&;_XP~&d;Jgy8u%-q>?=dT=+I|0oKejm`R_%Z0wYX@X%zJL!iMZ(pnV2f;ygi(wuIilnNTFg3yq zvI@iIq-=S1UP|NzWKdLZ$b}xOC7gm>R73v!M3x?0}zg>DwB{aL{+W$pK-rTi6 zwwU)D_>V&JW!Az7zfZqvWd^Ea?92FMCe|&=r;#>O0 zmEjAYu<~FF-PV=S9dXaWQxSvzjPC!&cMSE0XbUAg;R;7cQRR{^e3V<_9_|5JZSk_W zgc>Qfgn=G?)CK(Hg3dxow^#5)?OkyZb*5;5Uqzf3uZp{3Rjfed*Zz^LyU9}SL^5AS zf1-Z}Gd8i1Wcnac33sydyenRYM`RjOoqx;KWkieh4a!Pz0&pB#*I#rb1K-VYq4IQYk z=9z{yW=yL8%D?Btmw%SiVRg-PcKkB^>nJ5P==vi63vpZDb2o5D6jtr7U%oL^PQ`Qg zeC5rZsd>BGw3ckwJaboh#Kkj*f$2JBx7#^WlISt5VP1S79l(W1T0DS9{G1Me#;dJO zJ$Ow>Mse_=i1=gC{bY2f+tX|b`gKYnT#Y9>i2XKN(}egH>77EWGkBtF)@ebb%6CAN zIbu8^o=%XcrDckazUSV={Z3aU;CZv#n>(|;eOt8`fuVt#w@s(FJq+8H+4;*sU|ZW8 zPS4$Ry}+=x>vmgpyQ;fw4?E}1o!ef&z1`TXqI9!S9(H?Y=CkJ<+TG}ik>qS3P5TSG zcoInSx{l^7kj^cjbLMO`fuWh#p&0s*5PFIihs3FqQ;fz$R}?${iem105=p;D#roZj z;xmUYL#HcisvY(haSjjti^W?wHFpN4>MBRcOh=gASHZq=WY_TJmf`hPAWb}>Cc~gC z>&S~pONE_5paB2nwR%k&VGkW`xgK_Q)X?bc3_a5c|@+Lh$0V=F=h9jW7sBKtmG{NN8Yxj zq&uJnxV394406}?2H<3yfxKS7EtR*gLilOVr4f>VvaBdmceZ1>>GCZd|5@xj7Q9hCpN%f5uI$~&&dYp@^{?fu+zE+*V*MJQbUO!Tg~Q@#NV>aONp@c zF~XJ!Yv8xPhf%hMYTs0r7dxH_Xx0!>nf{kBB-0rfR)85nbZcGY{a{CoS8gDnyl{sO z_!tW@hJaBMXRZUxKy~YZk8mueTN~}Ayq_NM;Rq|^EBMjo8J*L4jlPd(eNAq} z3E}qvcZl#C3GA7+>pDs6|9k+Q(_MEpl5qI0%j$5?h46)~pFb1jPn#j^#;G$dF&yAT zZPbv~Ch3ZQ02jgsKhSb@UN_~_3hr4tW1Z!b)*fWA1@C%)q4|s|G%KMS_2q-U-cqUN zyZ^i$H;C`JdZT&~H97I_RZgy6oZCk@3=0VXhE`b^{AYjzZkHmd6$Ej>`uGTlf z{FCu{2SO;!s!1qL3$srpt>=k&1i777KU+buMgmrKp%75r8& zQJo*`6`Cu{rPZ@@&6WAMDopEEQ5g}N9j2t;!=+QOEs>j{C};?Ab0XU51Qv7qpbNG4^bYKaX@E zS?x}ty47^ln$x}R2Bm9TB`HUFatHM#-Qktxu`Y$Vg;$p4YoC?(B=)<7dCk*En3k?= zmBy6lSh}@T|3axS(Z;0eOQqJ0Y$FH5WRy{u&Rzv6ruD2zOY5ln|L50}^FX|u+++ns zu7Ug1WIFHa+fCo=Y_IvY-fBCv)%tNVeOmPsrqU@-!E2D2x z%V*b1h&>t4d`VLuf2)#XaOuKjbXuxX|E04l^j|-}eu*gTUeK1!)g`%AxkjC{5^L_l zB?zn3uWVe0%ve4qYyEl+J30!*LJfO3Mq(;p5hsh9@T37Yp)$j_2tE(Ab#`4x{uM9} zhzN@8E6YLe%00Y8jBSN#KH>nu00tDEbnvp5l)M zESxLabuHknhX@%9kUNlTt;QkdM61l_VOJP4V^VF=h5~wHjD+JG!lP}F0-5pRiLh+L zQML>8Mh7Q6h7KKqC~8N;R?n@xG}?V-DI5uiRv&z1mrrkNVULj-fG8accX@`&#m}-# z!?MzdhF6D%#|H$+x`lx%(<1NCVPT~#8!8w?=pHDK&U7&>A5|ZxfU6cE*t>kB;5iU^ z2VjpTEnkz%+$T{#dzsru>&bNMJfpcJTjz8jK)A7x5|xf1()&H7K2QEH{+>-KUmKy+ z!eXRAO&WL53xSjK^i0bP{iYX{{+E>lY97^!C^A>#jn&(5QgPf zU5`mei|CWk5qvw0ZVv5qWk$+KhX5eI0zOG7ut2$!Q>m#(Jv(V??IcP&J~xXJ2bKLl%vAd!1Rj+K4V?QF-%#yjPE6ex|E*0^z)YC z@A$Mrd%Is~HL49Nw5l7+8%{t)EVcnXHdW739j-zqg*6;KbOXug6B%jNRa8btd>(_z zTNtfzha+98mNGp0!epejg~hw2tSvX|)W)-~^*jf{kp8MM$)cEcE6 z58B8JHVwPtx&a{u!da9VLK;B+_2k$teI*j1C4vd?8`gImz6S0d7>;Ui%|)KUuranw z@}e#;~)kf)hq=`yyN{HR3D9C_1e-KzsS%GcaOttelY@-&4AvMSP$ zVE*3Y#AV5iHT>@7I$RTkK;bNr5n%(7RZIJ4~9B$P7HGAbV*KRGJU#g8N zdu#_W%g1$5stUPbmJX4NMion3H0ifl9zrP4bcm8x7v<{8xN9isgkA^~MElYG2*jk_ zUY(duw>{v)aj8q|<5J^pV`7(a&FniWdS!(=jv8nrfkv6LLz+21#<{J-dQr}=R&S1T zV)e7BIvk4R>Z?mxosO7`6U`fr8GxlfsWVNp%(_@cVhmX~8hpAWGUCakyQwt+>7&33 zO^Z)_$(yZ;d_wAC5rF(MwgZNs%qcK!<%R%Ao`(b>5^7Nb8t@fa%Tk)}Cb5WQfJLK& z1Ze0z?CeBI*BI!{H7N-z7qKnj;Ns1bNs3rr4TsW%z;Bc%B#hg0Eu2Rv(HMOSBpnq3 z_Py8ZIbaYc%#ljAB_ZC3w2Q^}it-*HThD2D4MuO;e((Uy9O>ZfV*{a+Ou+kWc0Cyw z^0ID^l8i`U>il3sSzX#FPXm;i7@CWZvQ$_4VW$I)d!c3BI}P(-2;hk<^Tw`0$!@1>Aj5nkL~X?~!m;`~1@T4M z#7C27^TaTYQ~ckZ$vKEiK@= 0F0000H THEN (* erase top boot block *) - INC(sectorAdr, FlM.memDevice.sectorSize DIV 2); - SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH); - INC(sectorAdr, FlM.memDevice.sectorSize DIV 8); - SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH); - INC(sectorAdr, FlM.memDevice.sectorSize DIV 8); - SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH); - END - END EraseSectorAm29F800; - - PROCEDURE ProgramLong (adr, data: INTEGER); -(* program one long at adr *) - VAR devAdr, word: INTEGER; - BEGIN - devAdr := adr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize; - -(* high word *) - word := data DIV 10000H MOD 10000H; - PutWord(devAdr + 0AAAAH, 0AAAAH); - PutWord(devAdr + 05554H, 5555H); - PutWord(devAdr + 0AAAAH, 0A0A0H); - PutWord(adr, word); - WaitByDataPoll(adr, word); - -(* low word *) - word := data MOD 10000H; INC(adr, 2); - PutWord(devAdr + 0AAAAH, 0AAAAH); - PutWord(devAdr + 05554H, 5555H); - PutWord(devAdr + 0AAAAH, 0A0A0H); - PutWord(adr, word); - WaitByDataPoll(adr, word) - END ProgramLong; - - - PROCEDURE ShowChipIDsAm29F040 * ; - (** - Syntax: XdeAmdFlashs.ShowChipIDsAm29F040B deviceAddress - - Preconditions: Target.DefineMemory defines the memory device Am29F040B - target connected via BDI - Description: shows: manufacturer id, device id and sector protection - Postconditions: the device(s) is in normal reading array mode. - *) - VAR devAdr: INTEGER; - BEGIN - BDIMain.ConnectDevice; - FlM.LoadMemDevPar("Am29F040"); InDeviceAdr(devAdr); GetChipIDsAm29F040(devAdr) - END ShowChipIDsAm29F040; - - - PROCEDURE ShowChipIDsAm29F800 * ; - (** - Syntax: XdeAmdFlashs.ShowChipIDsAm29F800B deviceAddress - - Preconditions: Target.DefineMemory defines the memory device Am29F800B - target connected via BDI - Description: shows: manufacturer id, device id and sector protection - Postconditions: the device(s) is in normal reading array mode. - *) - VAR devAdr: INTEGER; - BEGIN - BDIMain.ConnectDevice; - FlM.LoadMemDevPar("Am29F800"); InDeviceAdr(devAdr); GetChipIDsAm29F800(devAdr) - END ShowChipIDsAm29F800; - - - - PROCEDURE EraseSectAm29F800 * ; - VAR sectAdr: INTEGER; - BEGIN - BDIMain.ConnectDevice; - FlM.LoadMemDevPar("Am29F800"); InSectorAdr(sectAdr); EraseSectorAm29F800(sectAdr) - END EraseSectAm29F800; - - - - PROCEDURE LoadAm29F010 * ; - (** Preconditions: there is an image file Am29F010.Tim - if neccessary, click on CRSystem.Build to update all images - Description: the image in file Am29F010.Tim is loaded to the targets flash memory devices. - Postconditions: all flash memory device sectors, touched by the records in the imagefile, - are first erased and then programed. - *) - BEGIN - BDIMain.ConnectDevice; - Done := TRUE; - FlM.InstallDeviceProc(EraseDevice, EraseSector, ProgramLong); - FlM.Program("Am29F010", FALSE) - END LoadAm29F010; - - - PROCEDURE LoadAm29F040 * ; - (** Preconditions: there is an image file Am29F040.Tim - if neccessary, click on CRSystem.Build to update all images - Description: the image in file Am29F040.Tim is loaded to the targets flash memory devices. - Postconditions: all flash memory device sectors, touched by the records in the imagefile, - are first erased and then programed. - *) - BEGIN - BDIMain.ConnectDevice; - Done := TRUE; - FlM.InstallDeviceProc(EraseDevice, EraseSector, ProgramLong); - FlM.Program("Am29F040", FALSE) - END LoadAm29F040; - - - PROCEDURE LoadAm29F800 * ; - (** Preconditions: there is an image file Am29F800B.Tim - if neccessary, click on CRSystem.Build to update all images - Description: the image in file Am29F800B.Tim is loaded to the targets flash memory devices. - Postconditions: all flash memory device sectors, touched by the records in the imagefile, - are first erased and then programed. - *) - BEGIN - BDIMain.ConnectDevice; - Done := TRUE; - FlM.InstallDeviceProc(EraseDevice, EraseSectorAm29F800, ProgramLong); - FlM.Program("Am29F800", FALSE) - END LoadAm29F800; - - - -BEGIN -END Xo68x32AmdFlashs. diff --git a/blackbox/Xo68x32/Mod/System.otd b/blackbox/Xo68x32/Mod/System.otd deleted file mode 100644 index 6028de7..0000000 --- a/blackbox/Xo68x32/Mod/System.otd +++ /dev/null @@ -1,1932 +0,0 @@ - -MODULE Xo68x32System; -(** © ProXon/ED 3.9.94 / 22.11.98 / 7.12.00 / 12.7.01 / 23.10.01 / 9.1.02 / 23.2.02 | *) - (*changes: - 3.1.05, AS USB support - 13.3.04, ED ShowExceptionHistory - August 1994, ED creation - *) - IMPORT - SYS := SYSTEM, - Services, Log := StdLog, Ports, TextModels, TextMappers, TextRulers, DevCommanders, DevMarkers, Strings, - Dialog, - XU := XdeUtilities, Errors := XdeErrors, BDI := UsbBDI332, BDIMain := UsbBDI, - CC := Xo68x32CompConsts, OPM := Xo68x32CompM, XE := XdeErrors, CRM := Xo68x32Modules, - RegDict := Xo68x32TrgtRegDict, ImFile := Xo68x32MemImageFile; - - CONST - COMPARE_IMAGE = FALSE; - - (* constants and types *) - - CONST - signOnMsg = "MC68x32 Cross System V 3.0.1 / NTB/ED 23.2.02"; - errPrefix = "System_"; excPrefix = "Exc_"; - kernelModName = "TobKernel"; - configText = "TargetConfig.odc"; configHdrText = "TargetConfigHdr.odc"; ramImageFileName = "RAM.tim"; - - CONST - MAX_NOF_LONGS_FILL = 84; - MAX_NOF_BYTES_WORDS_FILL = 126; - - CONST - nul = 0X; ht = 9X; false = 0; true = 1; newErr = 0; - mm = Ports.mm; - safetyZoneSize = 4*4; - nofRegNamesPerLine = 8; nofRegNamesPerPage = 15; - - CONST (*OPT Structure Forms (standard types) *) - (* structure forms *) - sfUndef = CC.sfUndef; sfSysByte = CC.sfSysByte; sfBool = CC.sfBool; sfShChar = CC.sfShChar; - sfByte = CC.sfByte; sfShInt = CC.sfShInt; sfInt = CC.sfInt; - sfShReal = CC.sfShReal; sfReal = CC.sfReal; - sfSet = CC.sfSet; sfByteSet = CC.sfByteSet; sfShSet = CC.sfShSet; - sfString = CC.sfString; - sfNilTyp = CC.sfNilTyp; sfNoTyp = CC.sfNoTyp; - sfPointer = CC.sfPointer; sfProcTyp = CC.sfProcTyp; sfComp = CC.sfComp; - - TYPE - Name = OPM.Name; ShortName = ARRAY 16 OF CHAR; LongName = ARRAY 64 OF CHAR; - VarDesc = RECORD name: LongName; textPos, adr, ind, form, size, baseType: INTEGER END; - ConstVarDesc = RECORD - objMode, form, baseForm: BYTE; - valueAdr, size: INTEGER; - name: OPM.Name - END; - - SystemConstEntry = RECORD name: Name; val: INTEGER END; - - - VAR - Done-: BOOLEAN; -(** previous operation successfully completed -*) - firstErr-, nofErrors-: SHORTINT; -(** first error occured, see error list in CRErrors.Text -*) - promCodeSize-, ramCodeSize-, romModsVarSize-, ramModsVarSize- (* targVarSize- *): INTEGER; -(** promCodeSize: size of code and constants of the set of target modules loaded to target RAM. - ramCodeSize: size of code and constants of the set of target modules loaded to target RAM. - targVarSize: size of all gloabal variables of the set of target modules defined by the parameter list of the Load command. - Note: these variables may only be evaluated by the procedure DefineMemory of the module Target. Outside of the activation of this proc, the two vars are not valid. - *) -(* Variables *) - - itemNames: ARRAY 5 OF ARRAY 6 OF CHAR; - formSizes: ARRAY sfComp + 1 OF SHORTINT; - variables: ARRAY 8 OF VarDesc; nofVars: SHORTINT; - targetState: SHORTINT; - - objRdr: OPM.ObjReader; - referencePos: INTEGER; kernItemName: Name; - -(* - refTextModel: TextModels.Model; refTextRdr: TextModels.Reader; refTextScnr: TextMappers.Scanner; -*) - gScnr: XU.Scanner; (* gloabal scanner *) gScnrBeg, gScnrEnd: INTEGER; - - CONST (* system table offsets *) - CIsupStackOrg = 00H; CIstartAdr = 01H; CIsupStackSize = 02H; (*CImoduleTabBase=03H;*) - CIcodeBaseRom = 04H; CIcodeSizeRom = 05H; CIcodeBaseRam = 06H; CIcodeSizeRam = 07H; - CIramModsVarBase = 08H; CIramModsVarSize = 09H; CIsafetyZoneVH = 0AH; - CIheapBase = 0CH; CIheapSize = 0DH; CIsafetyZoneHUS = 0EH; - CIuserStackOrg = 10H; CIuserStackSize = 11H; CIsafetyZoneUSSS = 12H; CIsafetyZoneSSTop = 13H; - CIsafetyZoneCode = 14H; (* 4 longs for safety zone codes *) - CImaxNofModules = 1EH; CInofModules = 1FH; - CIfirstModule = 20H; -(*R 971127 - CItagFcs=LEN(sysTab)-1; -*) - VAR (* target parameters, extracted from TobKernel and/or calculated by Xo68x32System *) - systemParDefined, CwatchdogEnab: BOOLEAN; - -(*R 971127 - CromBase, CromSize, CramBase, CramSize, CperiphBase, CperiphSize: INTEGER; -*) - CromBase, CromSize, CramBase, CramSize: INTEGER; - VcommandAdr: INTEGER; (* offset of system variable Vcommand in module TobKernel *) - - VAR - kernelMemDeviceId: SHORTINT; - configT: TextModels.Model; configTextForm: TextMappers.Formatter; - - VAR (* targget/host system parameters *) -(*R 971127 - sysTabAdr: INTEGER; sysTab: ARRAY (20H + (3*CmaxNofModules + 3 + 1)) OF INTEGER; -*) - sysTabAdr, sysTabSize, maxNofModules, vItagFcs: INTEGER; sysTab: POINTER TO ARRAY OF INTEGER; - sysConsts: ARRAY 32 OF SystemConstEntry; nofSysConsts: INTEGER; - anyCodeInReadOnly, anyCodeInRam: BOOLEAN; - tmpTargetInDebugMode: BOOLEAN; - - VAR - Fcs: PROCEDURE (begin, end: INTEGER): SHORTINT; - - VAR - addrList*, dataList*: ARRAY 10000 OF INTEGER; - maxDataListIndex*: INTEGER; - - - PROCEDURE Error (errNr: SHORTINT); - BEGIN - IF Done THEN firstErr := errNr; Done := FALSE END; INC(nofErrors); - XE.Error("", errPrefix, errNr, TRUE) - END Error; - - (* - PROCEDURE SyntaxErrorLn (pos: INTEGER; errNr: SHORTINT); - BEGIN - Error(errNr); Log.Tab; Log.String("pos "); Log.Int(pos); Log.Ln - END SyntaxErrorLn; - - *) - PROCEDURE SyntaxErrorAtScnrPos (pos: INTEGER; errNr: SHORTINT); - VAR errMsg: XU.String64; - BEGIN - IF Done THEN - Strings.IntToString(errNr, errMsg); - XE.GetErrorCommentByName(NIL, errPrefix + errMsg, errMsg); - DevMarkers.Insert(gScnr.Base(), pos, DevMarkers.dir.NewMsg(errMsg)); - gScnr.SetPos(gScnr.Pos() + 1); - Error(errNr); Log.String(" (lokate marker)"); Log.Ln - END - END SyntaxErrorAtScnrPos; - - PROCEDURE LogLine (s: ARRAY OF CHAR); - BEGIN - Log.String("Xo68x32System: "); Log.Tab; Log.String(s$); Log.Ln - END LogLine; - - PROCEDURE LogHex (val: INTEGER); - BEGIN - Log.Char('0'); Log.IntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END LogHex; - - PROCEDURE LogCmdr; - BEGIN - Log.View(DevCommanders.dir.New()) - END LogCmdr; - - PROCEDURE LogCmdrEnd; - BEGIN - Log.View(DevCommanders.dir.NewEnd()) - END LogCmdrEnd; - - PROCEDURE LogXo68x32SystemCmd (IN cmd: ARRAY OF CHAR); - BEGIN - Log.Char(' '); LogCmdr; Log.String("Xo68x32System." + cmd) - END LogXo68x32SystemCmd; - - - PROCEDURE ConnectGlobalScannerToCmdParams; - VAR parText: TextModels.Model; - BEGIN - XU.GetTextModel("@!", parText, gScnrBeg, gScnrEnd); - gScnr.ConnectTo(parText); - gScnr.SetOpts({XU.soReturnQualIdents, XU.soReturnViews}); - gScnr.SetPos(gScnrBeg) - END ConnectGlobalScannerToCmdParams; - - - PROCEDURE GetTargetStateAndBreak; - BEGIN - tmpTargetInDebugMode := BDI.isTargetInDebugMode(); - BDIMain.ConnectDevice; - IF ~BDI.isTargetInDebugMode() THEN - IF ~BDI.isFreezeAsserted () THEN - BDI.break_ - END - END - END GetTargetStateAndBreak; - - - PROCEDURE TurnTargetToPrevState; - BEGIN - IF BDI.isTargetInDebugMode () & ~tmpTargetInDebugMode THEN BDI.go END - END TurnTargetToPrevState; - - PROCEDURE ShowTargetState; - BEGIN - IF BDI.isTargetInDebugMode() THEN - Log.String("target stopped"); LogXo68x32SystemCmd("TargetGo ?"); Log.Ln - ELSE - Log.String("target running"); LogXo68x32SystemCmd("TargetBreak ?"); Log.Ln - END - END ShowTargetState; - - PROCEDURE ObjRead (OUT byte: BYTE); - BEGIN - OPM.ReadByte(objRdr, byte) - END ObjRead; - - PROCEDURE ObjReadInt (OUT val: INTEGER); - BEGIN - OPM.ReadInt(objRdr, val) - END ObjReadInt; - - PROCEDURE RefOpen (IN modName: OPM.Name); - VAR tag, compVers: BYTE; - BEGIN - Done := TRUE; - objRdr := OPM.NewObjReader(modName, NIL); - IF objRdr = NIL THEN - Error(11) - ELSE - ObjRead(tag); IF tag # CC.tagObjFile THEN - Error(newErr) - ELSE - ObjRead(compVers); ObjReadInt(referencePos); - objRdr.SetPos(referencePos); - ObjRead(tag); IF tag # CC.tagReference THEN Error(2) END - END - END - END RefOpen; - - PROCEDURE RefRead (OUT byte: BYTE); - BEGIN - OPM.ReadByte(objRdr, byte) - END RefRead; - - PROCEDURE RefReadNum (OUT val: INTEGER); - BEGIN - OPM.ReadNum(objRdr, val) - END RefReadNum; - - PROCEDURE RefReadInt (OUT val: INTEGER); - BEGIN - OPM.ReadNum(objRdr, val) - END RefReadInt; - - PROCEDURE RefReadNameVis (OUT str: ARRAY OF CHAR; OUT visibility: BYTE); - BEGIN - OPM.RefRNameVis(objRdr, str, visibility) - END RefReadNameVis; - - PROCEDURE SelectGlobItem (objMode: INTEGER; IN objName: ARRAY OF CHAR; OUT obj: ConstVarDesc); - VAR - valueAdr, size: INTEGER; oMode, form, baseForm: BYTE; - name: OPM.Name; - tag, vis: BYTE; found: BOOLEAN; - BEGIN - objRdr.SetPos(referencePos); - ObjRead(tag); IF tag # CC.tagReference THEN - Error(2) - ELSE - RefRead(tag); - IF tag # CC.tagRefBlock THEN - Error(3) - ELSE - RefReadNum(valueAdr); RefReadNameVis(name, vis); (* skip module body *) - REPEAT - RefRead(oMode); RefReadNameVis(name, vis); RefReadInt(valueAdr); - RefReadInt(size); RefRead(form); RefRead(baseForm); - found := ((objMode = oMode) & (objName = name)) - UNTIL found OR (objMode = CC.tagRefBlock) OR objRdr.eof; - IF found THEN - obj.name := name; - obj.objMode := oMode; obj.form := form; obj.baseForm := baseForm; obj.size := size; - IF objMode = CC.omVar THEN DEC(valueAdr, OPM.maxCodeSize) END; - obj.valueAdr := valueAdr; - ELSE - obj.name := ""; - obj.objMode := 0; obj.form := CC.sfUndef; obj.baseForm := CC.sfUndef; - obj.valueAdr := 0; obj.size := 0 - END - END - END - END SelectGlobItem; - - - PROCEDURE TKernelRefOpen * ; -(** Opens the file TobKernel reference part of the object file -*) - VAR c0, c1: CHAR; - BEGIN - referencePos := 0; kernItemName := ""; RefOpen(kernelModName) - END TKernelRefOpen; - - PROCEDURE TKernelConst * (IN name: ARRAY OF CHAR): INTEGER; -(** Returns the value of any global constant of module TobKernel. name is the const name without the module name. - Note: open the file with TobKernelRefOpen and than fetch constants in alphabetic order to speed up. - Exmpl: ramSize := TobKernelConst("CramSize"); -*) - VAR cv: ConstVarDesc; - BEGIN - SelectGlobItem(CC.omConst, name, cv); (* PrintCV(cv); Log.Ln; *) - IF cv.objMode = 0 THEN Error(13) ELSE kernItemName := cv.name$ END; - RETURN cv.valueAdr - END TKernelConst; - - - PROCEDURE TKernelVarOffset (name: ARRAY OF CHAR): INTEGER; - VAR cv: ConstVarDesc; - VAR val: INTEGER; c0, c1: CHAR; - BEGIN - SelectGlobItem(CC.omVar, name, cv); (* PrintCV(cv); Log.Ln; *) - IF cv.objMode = 0 THEN Error(14) ELSE kernItemName := cv.name$ END; - RETURN cv.valueAdr - END TKernelVarOffset; - - - PROCEDURE CreateSystemTab (len: INTEGER); - VAR i: INTEGER; - BEGIN - Log.String("CreateSystemTab"); Log.Ln; - NEW(sysTab, len); vItagFcs := len - 1; - systemParDefined := FALSE; - FOR i := 0 TO LEN(sysTab^) - 1 DO sysTab[i] := 0 END; - sysTab[CIsafetyZoneCode] := 7F7F5E5EH; sysTab[CIsafetyZoneCode + 1] := 4D4D3C3CH; - sysTab[CIsafetyZoneCode + 2] := 2B2B1A1AH; sysTab[CIsafetyZoneCode + 3] := 55554AB3H - END CreateSystemTab; - - PROCEDURE GetSystemConstants; -(* gets the system constants from TobKernel.Ref and creates the system tab *) - VAR n, v, offset: INTEGER; - BEGIN - Done := TRUE; - TKernelRefOpen; -(*R 971127*) - n := TKernelConst("COtagFcs"); - maxNofModules := TKernelConst("CmaxNofModules"); - sysTabSize := TKernelConst("CsysTabSize"); - - IF sysTabSize # (CIfirstModule + 3 * maxNofModules + 3 + 1) * 4 THEN Error(15) END; - IF Done THEN - CreateSystemTab(sysTabSize DIV 4); - IF n # (LEN(sysTab^) - 1) * 4 THEN Error(15) END - END; - - IF Done THEN - n := 0; - WHILE Done & (n < nofSysConsts) DO - v := TKernelConst(sysConsts[n].name); offset := sysConsts[n].val; - IF offset >= 0 THEN - IF v # offset THEN - Error(16); Log.Tab; Log.String("const name "); Log.String(sysConsts[n].name$); Log.Ln - END - ELSE - sysTab[ABS(offset)] := v - END; - INC(n); - END; - -(*R 971127 - CperiphBase := TKernelConst("CperiphBase"); CperiphSize := TKernelConst("CperiphSize"); -*) - CramBase := TKernelConst("CramBase"); CramSize := TKernelConst("CramSize"); - CromBase := TKernelConst("CromBase"); CromSize := TKernelConst("CromSize"); - CwatchdogEnab := TKernelConst("CwatchdogEnab") # false; - - VcommandAdr := TKernelVarOffset("Vcommand"); (* offset by this time, inc in Xo68x32System.Load *) - END - END GetSystemConstants; - - PROCEDURE InsertSysConst (name: ARRAY OF CHAR; val: INTEGER); - VAR n: INTEGER; - BEGIN - n := nofSysConsts - 1; - ASSERT(nofSysConsts < LEN(sysConsts), 99); - WHILE (n >= 0) & (name < sysConsts[n].name) DO - sysConsts[n + 1] := sysConsts[n]; DEC(n); - END; - INC(n); - ASSERT(name # sysConsts[n].name, 99); - sysConsts[n].name := name$; sysConsts[n].val := val; - INC(nofSysConsts) - END InsertSysConst; - - PROCEDURE SystemConstantsSetUp; -(* gets the system constants from TKernel.Ref *) - BEGIN -(*R 971127 - ClearSystemTab; -*) - -(* system table offsets to be checked *) - nofSysConsts := 0; - InsertSysConst("COsupStackOrg", 4 * CIsupStackOrg); (* 00H *) - InsertSysConst("COstartAdr", 4 * CIstartAdr); - InsertSysConst("COsupStackSize", 4 * CIsupStackSize); - - InsertSysConst("COcodeBaseRom", 4 * CIcodeBaseRom); (* 04H *) - InsertSysConst("COcodeSizeRom", 4 * CIcodeSizeRom); - InsertSysConst("COcodeBaseRam", 4 * CIcodeBaseRam); - InsertSysConst("COcodeSizeRam", 4 * CIcodeSizeRam); - - InsertSysConst("COramModsVarBase", 4 * CIramModsVarBase); (* 08H *) - InsertSysConst("COramModsVarSize", 4 * CIramModsVarSize); - InsertSysConst("COsafetyZoneVH", 4 * CIsafetyZoneVH); - - InsertSysConst("COheapBase", 4 * CIheapBase); (* 0CH *) - InsertSysConst("COheapSize", 4 * CIheapSize); - InsertSysConst("COsafetyZoneHUS", 4 * CIsafetyZoneHUS); - - InsertSysConst("COuserStackOrg", 4 * CIuserStackOrg); (* 10H *) - InsertSysConst("COuserStackSize", 4 * CIuserStackSize); - InsertSysConst("COsafetyZoneUSSS", 4 * CIsafetyZoneUSSS); - InsertSysConst("COsafetyZoneSSTop", 4 * CIsafetyZoneSSTop); - - InsertSysConst("COsafetyZoneCode", 4 * CIsafetyZoneCode); (* 14H .. 17H *) - - InsertSysConst("COmaxNofModules", 4 * CImaxNofModules); (* 1EH *) - InsertSysConst("COnofModules", 4 * CInofModules); (* 1FH *) - InsertSysConst("COfirstModule", 4 * CIfirstModule); (* 20H *) -(*R 971127 - InsertSysConst("COtagFcs", 4*CItagFcs); (* 20H *) -*) - -(* system consts to be fetched *) - InsertSysConst("CsupStackSize", - CIsupStackSize); - InsertSysConst("CuserStackSize", - CIuserStackSize); - InsertSysConst("CmaxNofModules", - CImaxNofModules) - END SystemConstantsSetUp; - - - PROCEDURE ShowSysConsts * ; -(** Shows system constants in System.Log. (for developpers only) -*) - VAR n: INTEGER; - BEGIN - Log.Ln; Log.String("System Constants:"); Log.Ln; Log.Tab; Log.String("system table offsets"); Log.Ln; - n := 0; - WHILE n < nofSysConsts DO - Log.Tab; Log.Tab; Log.String(sysConsts[n].name$); Log.Tab; LogHex(sysConsts[n].val); Log.Ln; - INC(n); - END; - Log.Ln; Log.Tab; Log.String("system parameters"); Log.Ln; - Log.Ln; Log.Tab; Log.Tab; Log.String("CromBase"); Log.Tab; LogHex(CromBase); - Log.Ln; Log.Tab; Log.Tab; Log.String("CromSize"); Log.Tab; LogHex(CromSize); - Log.Ln; Log.Tab; Log.Tab; Log.String("CramBase"); Log.Tab; LogHex(CramBase); - Log.Ln; Log.Tab; Log.Tab; Log.String("CramSize"); Log.Tab; LogHex(CramSize); -(*R 971127 - Log.Ln; Log.Tab; Log.Tab; Log.String("CperiphBase"); Log.Tab;LogHex(CperiphBase, 0); - Log.Ln; Log.Tab; Log.Tab; Log.String("CperiphSize"); Log.Tab;LogHex(CperiphSize, 0); -*) - Log.Ln; Log.Tab; Log.Tab; Log.String("CcodeInReadOnlyMem"); Log.Tab; Log.Bool(anyCodeInReadOnly); - Log.Ln; Log.Tab; Log.Tab; Log.String("CwatchdogEnab"); Log.Tab; Log.Bool(CwatchdogEnab) - END ShowSysConsts; - - PROCEDURE ShowSystemTable * ; -(** Shows the content of the system table in System.Log -*) - VAR m, n, ln: INTEGER; name: Name; - BEGIN - Log.Ln; Log.String("System Table"); Log.Ln; - ln := 0; - IF ~systemParDefined THEN - Log.Tab; Log.String("not yet defined (do first 'Xo68x32System.Load' or 'Xo68x32System.GenPromFile'"); Log.Ln; - RETURN - END; - n := 0; - WHILE n < 20H DO - m := 0; - WHILE (m < nofSysConsts) & (sysConsts[m].val # 4 * n) DO INC(m) END; - IF m < nofSysConsts THEN - name := sysConsts[m].name; name[0] := ' '; name[1] := ' '; - Log.Tab; LogHex(n); Log.String(name$); Log.Char(":"); Log.Tab; LogHex(sysTab[n]); - IF n = CIsafetyZoneCode THEN - Log.Tab; LogHex(sysTab[CIsafetyZoneCode + 1]); - Log.Tab; LogHex(sysTab[CIsafetyZoneCode + 2]); - Log.Tab; LogHex(sysTab[CIsafetyZoneCode + 3]) - END; - Log.Ln; ln := 0 - ELSE - IF ln = 0 THEN Log.Ln END; INC(ln); - END; - INC(n); - END; Log.Ln; - m := 0; n := CIfirstModule; - WHILE (m < CRM.nofModules) DO - LogHex(n); Log.Tab; Log.String("code begin"); Log.Tab; Log.Int(m); Log.Char(":"); - Log.Tab; LogHex(sysTab[n]); Log.Ln; INC(n); - LogHex(n); Log.Tab; Log.String("code limit "); Log.Tab; Log.Int(m); Log.Char(":"); - Log.Tab; LogHex(sysTab[n]); Log.Ln; INC(n); - LogHex(n); Log.Tab; Log.String("body "); Log.Int(m); Log.Tab; Log.Char(":"); - Log.Tab; LogHex(sysTab[n]); Log.Ln; INC(n); - INC(m); Log.Ln - END -(*R 971127 - LogHex(LEN(sysTab^)-1, 3); Log.Tab; Log.String("tag,fcs:"); Log.Tab; LogHex(sysTab[LEN(sysTab^)-1], 0); Log.Ln; -*) - END ShowSystemTable; - - - PROCEDURE InsertVar (name: ARRAY OF CHAR; pos: INTEGER); - VAR n: INTEGER; - BEGIN - IF nofVars < LEN(variables) THEN - n := nofVars - 1; - WHILE (n >= 0) & (name < variables[n].name) DO - variables[n + 1] := variables[n]; DEC(n) - END; - INC(n); - variables[n].name := name$; variables[n].textPos := pos; variables[n].adr := 0; - variables[n].ind := 0; variables[n].form := 0; variables[n].size := 0; variables[n].baseType := 0; - INC(nofVars) - END - END InsertVar; - - PROCEDURE PrintVariable (n: SHORTINT); - BEGIN - Log.Ln; Log.String("Variable["); Log.Int(n); Log.String("]: "); - Log.String("name="); Log.String(variables[n].name$); - Log.String(", textPos "); Log.Int(variables[n].textPos); - Log.Ln; Log.Tab; Log.String("adr="); LogHex(variables[n].adr); - Log.String(", ind="); Log.Int(variables[n].ind); - Log.String(", form="); Log.Int(variables[n].form); - Log.String(", size="); Log.Int(variables[n].size); - Log.String(", baseType="); Log.Int(variables[n].baseType); Log.Ln - END PrintVariable; - - (* - PROCEDURE PrintVars; - VAR n: SHORTINT; - BEGIN - n := 0; WHILE n < nofVars DO PrintVariable(n); INC(n) END - END PrintVars; - *) - PROCEDURE WriteRegToLog (regName: ARRAY OF CHAR; VAR validName: BOOLEAN); - VAR - val: INTEGER; write: RegDict.WriteProc; n: SHORTINT; - BEGIN - Log.String(regName$); Log.String(" = "); - RegDict.SelectReg(regName, validName); - IF ~validName THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 0); RETURN END; - write := RegDict.RegWriteProc(); n := RegDict.RegSize(); - - CASE RegDict.RegType() OF - | RegDict.UserReg: val := BDI.readUserReg(RegDict.RegCode()); - | RegDict.SysReg: val := BDI.readSysReg( RegDict.RegCode()); - | RegDict.CtrlReg: val := BDI.readMem( RegDict.RegCode(), n); - ELSE - Error(1) - END; - CASE n OF |1: val := val MOD 100H; |2: val := val MOD 10000H ELSE END; - LogHex(val); - Log.String("(*" ); Log.Int(val); Log.String("*)"); Log.Ln - END WriteRegToLog; - - PROCEDURE OutNum (hexVal, decVal, cardinal: INTEGER); - BEGIN - Log.String(" "); LogHex(hexVal); Log.String("(*"); Log.Int(decVal); - IF cardinal # 0 THEN Log.String(" | "); Log.Int(cardinal) END; - Log.String("*)") - END OutNum; - - PROCEDURE OutItem (val: INTEGER; form: INTEGER); - VAR card: INTEGER; real: SHORTREAL; int: SHORTINT; short: BYTE; c: CHAR; - BEGIN - card := 0; - CASE form OF - |sfBool: - val := val MOD 100H; Log.String(" "); LogHex(val); - IF val = 0 THEN Log.String("(*FALSE*)") ELSE Log.String("(*TRUE*)") END; - |sfShChar: - c := SHORT(CHR(val)); - IF (c >= ' ') & (c <= '~') THEN Log.Char(c) ELSE Log.Char('.') END; - - |sfByte: - short := SHORT(SHORT(val)); IF short < 0 THEN card := LONG(short) + 100H END; - OutNum(val MOD 100H, short, card) - |sfShInt: - int := SHORT(val); IF int < 0 THEN card := LONG(int) + 10000H END; - OutNum(val MOD 10000H, int, card) - |sfInt: OutNum(val, val, 0) - |sfShReal: - Log.String(" "); real := SYS.VAL(SHORTREAL, val); Log.Real(real); - Log.String("(*"); LogHex(val); Log.String("*)") - ELSE - Log.String(" "); LogHex(val) - END - END OutItem; - - PROCEDURE ReadMemLocs (memAddr: INTEGER; itemSize, len, form: INTEGER); - VAR - memData, m, dataLength, recLength, i: INTEGER; itemsPerLine: SHORTINT; - data: ARRAY MAX_NOF_LONGS_FILL OF INTEGER; - BEGIN - (* - Log.String("ReadMemLocs: addr="); LogHex(memAddr); Log.String(", itemSize="); LogHex(itemSize); - Log.String(", len="); LogHex(len); Log.String(", form="); LogHex(form); Log.Ln; - *) - itemsPerLine := 4; IF itemSize = 1 THEN itemsPerLine := 8 END; - IF form = sfShChar THEN itemsPerLine := 256 END; - m := 0; IF len > 256 THEN len := 256 END; - LOOP - IF m = 0 THEN - memData := BDI.readMem(memAddr, itemSize); - LogHex(memAddr); Log.Char(':'); IF form = sfShChar THEN Log.Tab END; - OutItem(memData, form); m := itemsPerLine; - recLength := 1; - ELSE - dataLength := MAX_NOF_LONGS_FILL; - IF len < MAX_NOF_LONGS_FILL THEN - dataLength := len - END; -(* FIXME: LEN(data) may be too long for the last dump *) - BDI.dumpMem(LEN(data), data, recLength); - (* - Log.Ln; Log.String("Dump: recLength: "); Log.Int(recLength); - Log.String(", len: "); Log.Int(len); Log.Ln; - *) - FOR i := 0 TO recLength - 1 DO - OutItem(data[i], form); Log.Ln; - END - END; - IF ~BDI.Done THEN - Error(41); EXIT - END; - INC(memAddr, LONG(itemSize) * recLength); DEC(len, recLength); IF len <= 0 THEN EXIT END; - DEC(m); IF m = 0 THEN LogCmdrEnd; Log.Ln END - END; - LogCmdrEnd; Log.Ln - END ReadMemLocs; - - PROCEDURE ReadVariables; - VAR form, itemSize, len, n: INTEGER; - BEGIN - GetTargetStateAndBreak; n := 0; - WHILE n < nofVars DO - form := variables[n].form; - IF form = sfComp THEN form := variables[n].baseType END; - itemSize := formSizes[form]; - len := variables[n].size DIV itemSize; - Log.String("Var: "); Log.String(variables[n].name$); Log.Ln; - Log.Tab; ReadMemLocs(variables[n].adr, itemSize, len, form); - INC(n) - END; - TurnTargetToPrevState; ShowTargetState - END ReadVariables; - - PROCEDURE ReadMem (form: INTEGER); - VAR c: CHAR; ch: CHAR; memAddr: INTEGER; len, itemSize: INTEGER; - BEGIN - ConnectGlobalScannerToCmdParams; - IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - itemSize := formSizes[form]; - gScnr.Int(memAddr); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 21); RETURN END; - gScnr.Char(ch); c := SHORT(ch); - IF ~gScnr.done OR (c # ':') THEN SyntaxErrorAtScnrPos(gScnr.Pos() - 1, 05); RETURN END; - gScnr.Int(len); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 23); RETURN END; - - GetTargetStateAndBreak; - ReadMemLocs(memAddr, itemSize, len, form); - TurnTargetToPrevState; ShowTargetState - END ReadMem; - - - PROCEDURE TargetInitSuccessful * (done: BOOLEAN); -(** Indicates successful initialisation of the target, called by proc Init in module Target. -*) - BEGIN - Done := done; - END TargetInitSuccessful; - - PROCEDURE ReadVar * ; -(** parameters: varName {varName} "¿¿E". varName = moduleName "." variableName. - Shows the content of the variables listed in the parameter list. Var name need to be qualified by the module name. -*) - VAR - mod, prevMod: CRM.TargetModule; - len, dotPos, n, timeInt, pos: INTEGER; - name: LongName; modName, varName: Name; tempName: ARRAY 32 OF CHAR; - refTextModel: TextModels.Model; c0, c1: CHAR; - name2: ARRAY 64 OF CHAR; - cv: ConstVarDesc; - BEGIN - Done := TRUE; nofVars := 0; c1 := nul; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soReturnQualIdents, XU.soReturnViews, XU.soSkipComments, XU.soScanComments}); - - IF gScnr.Next() = XU.stInt THEN gScnr.Int(timeInt) END; - pos := gScnr.Pos(); gScnr.Ident(name2); name := SHORT(name2$); - WHILE gScnr.done & (nofVars < LEN(variables)) DO - InsertVar(name, pos); pos := gScnr.Pos(); gScnr.Ident(name2); name := SHORT(name2$); - END; - IF nofVars = 0 THEN SyntaxErrorAtScnrPos(pos, 11); RETURN END; - IF gScnr.done THEN Error(19) END; - - n := 0; prevMod := NIL; - LOOP - name := variables[n].name; pos := variables[n].textPos; - len := LEN(name$); Strings.Find(name$, ".", 0, dotPos); - IF (len = 0) OR (dotPos <= 0) THEN SyntaxErrorAtScnrPos(pos, 24); EXIT END; - Strings.Extract(name$, 0, dotPos, modName); - - mod := CRM.ThisLoadedModule(modName); - IF mod = NIL THEN SyntaxErrorAtScnrPos(pos, 25); EXIT END; - - IF mod # prevMod THEN - prevMod := mod; - referencePos := 0; RefOpen(modName); - IF referencePos = 0 THEN SyntaxErrorAtScnrPos(pos, 11); EXIT END; -(* -Log.String("Sys:ReadVar "); Log.String(name); Log.String(", modName: "); Log.String(modName); - - XU.GetRefModel(modName$, refTextModel); - IF refTextModel = NIL THEN SyntaxErrorAtScnrPos(pos, 11); EXIT END; - - gScnr.ConnectTo(refTextModel); gScnr.Scan; c1 := nul; - REPEAT c0 := c1; gScnr.Char(c1) UNTIL ~gScnr.done OR (c0 = '>') & (c1 = 'M'); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(pos, 12); EXIT END; -*) - END; - - Strings.Extract(name$, dotPos + 1, len - dotPos - 1, varName); - SelectGlobItem(CC.omVar, varName, cv); - IF cv.objMode = CC.omUndef THEN SyntaxErrorAtScnrPos(pos, 14); EXIT END; -(* -Log.String(", varName: "); Log.String(varName); Log.String(", modName"); Log.Ln; - - REPEAT - REPEAT c0 := c1; gScnr.Char(c1) UNTIL ~gScnr.done OR (c0 = '>') & (c1 = 'V'); - gScnr.Ident(name2); name := SHORT(name2$); - UNTIL ~gScnr.done OR (name = varName); - -Log.Tab; Log.String("name: ");Log.String(name); Log.Ln; -Log.Tab; Log.String("adr0: "); LogHex(cv.valueAdr); Log.Ln; -Log.Tab; Log.String("VarBase: "); LogHex(CRM.VarBase(mod)); Log.Ln; -Log.Tab; Log.String("VarSize: "); LogHex(CRM.VarSize(mod)); Log.Ln; -*) - - variables[n].ind := CC.omVar; - variables[n].adr := cv.valueAdr + CRM.VarBase(mod); - variables[n].form := cv.form; - variables[n].size := cv.size; - variables[n].baseType := cv.baseForm; - -(* -Log.Tab; Log.String("oMode: "); LogHex(variables[n].ind); Log.Ln; -Log.Tab; Log.String("form: "); LogHex(variables[n].form); Log.Ln; -Log.Tab; Log.String("baseForm: "); LogHex(variables[n].baseType); Log.Ln; -Log.Tab; Log.String("size: "); LogHex(variables[n].size); Log.Ln; -Log.Tab; Log.String("adr: "); LogHex(variables[n].adr); Log.Ln; - - gScnr.Int(variables[n].ind); gScnr.Int(variables[n].adr); INC(variables[n].adr, CRM.VarBase(mod)); - gScnr.Int(variables[n].form); gScnr.Int(variables[n].size); gScnr.Int(variables[n].baseType); - IF ~gScnr.done THEN SyntaxErrorLn(pos, 12); EXIT END; -*) - - INC(n); IF n >= nofVars THEN EXIT END; - END; - IF Done THEN ReadVariables END; - END ReadVar; - - PROCEDURE LogExceptionsHead; - VAR ruler: TextRulers.Ruler; - BEGIN - ruler := TextRulers.dir.New(NIL); -(* - TextRulers.SetFirst(ruler, 8*mm); TextRulers.SetLeft(ruler, 12*mm); - exc# format vectNr vectOffset SR PC (addr) Module[pcOffset] - 1 02H 06H 018H 02700H 01018CAH To68x32Heap[0932H] - *) - TextRulers.AddTab(ruler, 8 * mm); TextRulers.MakeRightTab(ruler); (*exc#*) - TextRulers.AddTab(ruler, 20 * mm); TextRulers.MakeRightTab(ruler); (*format*) - TextRulers.AddTab(ruler, 24 * mm); (*exception comment from Xde\Docu\Errors*) - TextRulers.AddTab(ruler, 34 * mm); TextRulers.MakeRightTab(ruler); (*evectNr*) - TextRulers.AddTab(ruler, 50 * mm); TextRulers.MakeRightTab(ruler); (*vectOffset*) - TextRulers.AddTab(ruler, 66 * mm); TextRulers.MakeRightTab(ruler); (*SR*) - TextRulers.AddTab(ruler, 90 * mm); TextRulers.MakeRightTab(ruler); (*PC (addr)*) - TextRulers.AddTab(ruler, 92 * mm); (*Module[pcOffset]*) - Log.View(ruler); - Log.Tab; Log.String("exc#"); Log.Tab; Log.String("format"); - Log.Tab; Log.Tab; Log.String("vectNr"); Log.Tab; Log.String("vectOffset"); Log.Tab; Log.String("SR"); - Log.Tab; Log.String("PC (addr)"); Log.Tab; Log.String("Module[pcOffset]"); Log.Ln; - END LogExceptionsHead; - - PROCEDURE LogDefaultRuler; - VAR ruler: TextRulers.Ruler; - BEGIN - ruler := TextRulers.dir.New(NIL); Log.View(ruler) - END LogDefaultRuler; - - - PROCEDURE ShowExceptionHistory * ; -(** parameters: varName {varName} "¿¿E". varName = moduleName "." variableName. - Shows the content of the variables listed in the parameter list. Var name need to be qualified by the module name. -*) - VAR - mod: CRM.TargetModule; - len, dotPos, n, timeInt, intVal, vectNr: INTEGER; - mwordsPC: ARRAY 4 OF INTEGER; (*mwordsPC[0] = M[pc], mwordsPC[1] = M[pc-2], ... mwordsPC[3] = M[pc-6]*) - name: LongName; modName, varName: Name; tempName: ARRAY 32 OF CHAR; - refTextModel: TextModels.Model; c0, c1: CHAR; - cv: ConstVarDesc; - (*---- Kernel Variables*) - nofUnexpInt, trInd, stAdr: INTEGER; (* nofUnexpInt: total number, trInd: trace index (of last int) *) - pcs: ARRAY 16 OF INTEGER; (* address at which the unexpected int occured *) - status: ARRAY 16 OF INTEGER; (* status words *) - vect: ARRAY 16 OF INTEGER; (* interrupt type (4 bits) and vector number 12 bits *) - buff: ARRAY 16 OF INTEGER; - - PROCEDURE ReadMemLocs (IN varName: ARRAY OF CHAR; OUT len: INTEGER; - OUT ints: ARRAY OF INTEGER); - VAR - memAddr, memData, m: INTEGER; itemSize, form, maxLen: INTEGER; - BEGIN - SelectGlobItem(CC.omVar, varName, cv); - IF cv.objMode = CC.omUndef THEN - Error(14) - ELSE - memAddr := cv.valueAdr + CRM.VarBase(mod); - form := cv.form; - IF form = sfComp THEN form := cv.baseForm END; - itemSize := formSizes[form]; - len := cv.size DIV itemSize; - (* - Log.String("Var: "); Log.String(cv.name$); Log.Ln; - Log.String("addr="); LogHex(memAddr); Log.String(", itemSize="); LogHex(itemSize); - Log.String(", len="); LogHex(len); Log.String(", form="); LogHex(form); Log.Ln; - *) - GetTargetStateAndBreak; - memData := BDI.readMem(memAddr, itemSize); ints[0] := memData; - m := 1; maxLen := MIN(len, LEN(ints)); - WHILE m < maxLen DO - HALT(35); - (* BDI.DumpMem(memData, itemSize); (*OutItem(memData, form);*) ints[m] := memData; *) - INC(m) - END; - TurnTargetToPrevState - END - END ReadMemLocs; - - - PROCEDURE LogLocation (pc: INTEGER); - VAR - mod: CRM.TargetModule; base: INTEGER; - name: OPM.LongName; - BEGIN - mod := CRM.FirstModule(); - LOOP - IF mod = NIL THEN EXIT END; - base := CRM.CodeBase(mod); - IF (pc >= base) & (pc < base + CRM.CodeSize(mod)) THEN EXIT END; - mod := CRM.NextModule() - END; - IF mod # NIL THEN - CRM.GetModuleName(mod, name); - Log.Tab; Log.String(name); Log.Char('['); LogHex(pc - base); Log.Char(']') - END; - END LogLocation; - - BEGIN - GetTargetStateAndBreak; - Done := TRUE; nofVars := 0; c1 := nul; - - mod := CRM.ThisLoadedModule(kernelModName); - IF mod = NIL THEN - Error(25) - ELSE - referencePos := 0; RefOpen(kernelModName); - XU.GetRefModel(modName$, refTextModel); - IF referencePos = 0 THEN Error(11) END - END; - IF Done THEN - ReadMemLocs("nofUnexpInt", len, buff); nofUnexpInt := buff[0]; - ReadMemLocs("trInd", len, buff); trInd := buff[0]; - ReadMemLocs("stAdr", len, buff); stAdr := buff[0]; - ReadMemLocs("pcs", len, pcs); - ReadMemLocs("status", len, status); - ReadMemLocs("vect", len, vect); - END; - IF Done THEN - Log.String("number of unexpected exceptions: "); Log.Int(nofUnexpInt); - IF nofUnexpInt > 0 THEN - Log.String(", trace index: "); Log.Int(trInd); Log.Ln; - n := MIN(len, nofUnexpInt); - LogExceptionsHead; -(* GetTargetState; *) - WHILE n > 0 DO - Log.Tab; Log.Int(nofUnexpInt); - intVal := vect[trInd]; vectNr := intVal MOD 1000H DIV 4; - Log.Tab; LogHex(intVal DIV 1000H MOD 16); (*format*) - Log.Tab; Log.Tab; Log.Int(vectNr); (*vectNr*) - Log.Tab; LogHex(vectNr * 4); (*vector offset*) - Log.Tab; LogHex(status[trInd]); - intVal := pcs[trInd]; Log.Tab; LogHex(intVal); LogLocation(intVal); Log.Ln; - Log.Tab; Log.Tab; Log.Tab; - IF vectNr < 32 THEN - Strings.IntToString(vectNr, tempName); - XE.GetErrorCommentByName(NIL, excPrefix + tempName$, tempName); tempName[0] := ' '; - Log.String(tempName$); - END; - IF vectNr = 7 THEN(*TRAPcc, TRAPV, read mem words frmo pc-6 ... pc*) - tempName := ""; - mwordsPC[3] := BDI.readMem(intVal - 3 * 2, 2); - - HALT(35); - (* - BDI.DumpMem(mwordsPC[2], 2); - BDI.DumpMem(mwordsPC[1], 2); BDI.DumpMem(mwordsPC[0], 2); - *) - IF mwordsPC[1] = 4E76H THEN (*TRAPV | TRAPcc with extension word of that pattern*) - tempName := ": TRAPV"; - ELSIF mwordsPC[2] = 50FAH THEN (*TRAPT (HALT(ew))*) - Strings.IntToString(mwordsPC[1], tempName); - tempName := ": HALT(" + tempName + ")"; - END; - Log.String(tempName$) - END; - Log.Ln; - trInd := (trInd - 1) MOD len; DEC(nofUnexpInt); DEC(n); - END; -(* TurnTargetToPrevState; ShowTargetState *) - LogDefaultRuler - END - END; - TurnTargetToPrevState; ShowTargetState - END ShowExceptionHistory; - - - PROCEDURE WriteMem (form: SHORTINT); - VAR - c: CHAR; memAddr, memStartAddr, memData: INTEGER; n, itemSize: SHORTINT; - BEGIN - n := 0; itemSize := formSizes[form]; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - gScnr.Int(memStartAddr); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 21); RETURN END; - gScnr.Char(c); - IF ~gScnr.done OR (c # ':') THEN SyntaxErrorAtScnrPos(gScnr.Pos() - 1, 05); RETURN END; - - gScnr.Int(memData); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 26); RETURN END; - - GetTargetStateAndBreak; - Log.Ln; Log.String("writing to memory:"); Log.Ln; LogHex(memStartAddr); Log.Char(':'); - BDI.writeMem(memStartAddr, memData, itemSize); OutItem(memData, form); - memAddr := memStartAddr; - - LOOP - IF ~BDI.Done THEN EXIT END; - INC(n, itemSize); - IF gScnr.Next() = XU.stChar THEN - gScnr.Char(c); - IF c = '~' THEN - Log.String("~"); Log.Ln; - gScnr.Int(memAddr); IF ~gScnr.done THEN EXIT END; - gScnr.Char(c); IF ~gScnr.done OR (c # ':') THEN EXIT END; - LogHex(memAddr); Log.Char(':'); - END; - END; - gScnr.Int(memData); - IF gScnr.done THEN - HALT(35); - (* - BDI.FillMem(memData, itemSize); OutItem(memData, form); - *) - ELSE - EXIT - END; - END; - Log.Ln; Log.Int(n); Log.String(" bytes written to memory"); - Log.Tab; LogXo68x32SystemCmd("ReadMem"); - Log.String(itemNames[itemSize]$); Log.Char(' '); LogHex(memStartAddr); Log.String(": "); - Log.Int(n DIV itemSize); LogCmdrEnd; Log.Ln; - TurnTargetToPrevState; ShowTargetState - END WriteMem; - - PROCEDURE WriteReg * (regName: ARRAY OF CHAR; val: INTEGER; VAR stillOk: BOOLEAN); - (* Sets the register defined by regName to val. regName must be member of the register dictionary (module RegDict). - stillOk := stillOk & operation successful - *) - VAR - found: BOOLEAN; - BEGIN - RegDict.SelectReg(regName, found); stillOk := stillOk & found; - IF stillOk THEN - CASE RegDict.RegType() OF - | RegDict.UserReg: BDI.writeUserReg(RegDict.RegCode(), val) - | RegDict.SysReg: BDI.writeSysReg( RegDict.RegCode(), val) - | RegDict.CtrlReg: BDI.writeMem( RegDict.RegCode(), val, RegDict.RegSize()) - ELSE - stillOk := FALSE - END; - stillOk := stillOk & BDI.Done - END - END WriteReg; - - PROCEDURE ShowUserRegNames * ; - (** Shows the user register names in System.Log. - *) - VAR n, m: INTEGER; name: RegDict.RegName; - BEGIN - RegDict.SelectFirstReg(); Log.Ln; Log.String("user registers:"); - Log.Tab; LogXo68x32SystemCmd("ReadRegister" ); Log.Ln; Log.Tab; - m := nofRegNamesPerLine; - FOR n := 0 TO RegDict.nofRegs - 1 DO - IF RegDict.RegType() = RegDict.UserReg THEN - IF m = 0 THEN Log.Ln; Log.Tab; m := nofRegNamesPerLine END; - Log.Tab; RegDict.GetRegName(name); Log.String( name$); DEC(m) - END; - RegDict.SelectNextReg() - END; - LogCmdrEnd; Log.Ln - END ShowUserRegNames; - - PROCEDURE ShowSysRegNames * ; - (** Shows the system register names in System.Log. - *) - VAR n, m: INTEGER; name: RegDict.RegName; - BEGIN - RegDict.SelectFirstReg(); Log.Ln; Log.String("system registers:"); - Log.Tab; LogXo68x32SystemCmd("ReadRegister" ); Log.Ln; Log.Tab; - m := nofRegNamesPerLine; - FOR n := 0 TO RegDict.nofRegs - 1 DO - IF RegDict.RegType() = RegDict.SysReg THEN - IF m = 0 THEN Log.Ln; Log.Tab; m := nofRegNamesPerLine END; - Log.Tab; RegDict.GetRegName(name); Log.String(name$); DEC(m) - END; - RegDict.SelectNextReg() - END; - LogCmdrEnd; Log.Ln - END ShowSysRegNames; - - PROCEDURE ShowCtrlRegNames * ; - (** Shows the control register names in System.Log. - *) - VAR n, m: INTEGER; name: RegDict.RegName; - BEGIN - RegDict.SelectFirstReg(); Log.Ln; Log.String("control registers:"); - Log.Tab; LogXo68x32SystemCmd("ReadRegister" ); Log.Ln; Log.Tab; - m := nofRegNamesPerLine; - FOR n := 0 TO RegDict.nofRegs - 1 DO - IF RegDict.RegType() = RegDict.CtrlReg THEN - IF m = 0 THEN Log.Ln; Log.Tab; m := nofRegNamesPerLine END; - Log.Tab; RegDict.GetRegName(name); Log.String(name$); DEC(m) - END; - RegDict.SelectNextReg() - END; - LogCmdrEnd; Log.Ln - END ShowCtrlRegNames; - - PROCEDURE ShowRegNames * ; - (** Shows all register names in System.Log. - *) - BEGIN - Log.Ln; Log.String("Register Dictionary:" ); - Log.String(" (total nr of registers: " ); Log.Int(RegDict.nofRegs); Log.Ln; - ShowUserRegNames; Log.Ln; - ShowSysRegNames; Log.Ln; - ShowCtrlRegNames; Log.Ln - END ShowRegNames; - - PROCEDURE DumpRegDictionary * ; - (** Shows the content of the register dictionary (all registers with there attributes) in System.Log. - *) - VAR n: INTEGER; name: RegDict.RegName; - BEGIN - RegDict.SelectFirstReg(); Log.String("Register Dictionary Dump:" ); Log.Ln; - FOR n := 0 TO RegDict.nofRegs - 1 DO - IF RegDict.RegType() = RegDict.CtrlReg THEN - Log.Tab; RegDict.GetRegName(name); Log.String(name$); Log.Char(','); - Log.Tab; LogHex(RegDict.RegCode()); - Log.String(", size=" ); Log.Int(RegDict.RegSize()); - Log.String(", type=" ); Log.Int(RegDict.RegType()); Log.Ln; - END; - RegDict.SelectNextReg() - END; - Log.Ln - END DumpRegDictionary; - - PROCEDURE ClearUserRegs * ; - (** Clears the user registers of the target processor (loads them with 0). - *) - VAR n: INTEGER; - BEGIN - RegDict.SelectFirstReg(); - FOR n := 0 TO RegDict.nofRegs - 1 DO - IF RegDict.RegType() = RegDict.UserReg THEN BDI.writeUserReg(RegDict.RegCode(), 0) END; - RegDict.SelectNextReg() - END - END ClearUserRegs; - - PROCEDURE ReadRegister * ; - (** parameters: regName {regName} "¿¿E". - Shows the contents of the registers, listed in the parameter list. - *) - VAR - regName: Name; validName: BOOLEAN; - name2: ARRAY 32 OF CHAR; - BEGIN - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - Log.Ln; LogXo68x32SystemCmd("WriteRegister"); Log.Ln; - gScnr.Ident(name2); regName := SHORT(name2$); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 00); RETURN END; - - GetTargetStateAndBreak; - REPEAT - WriteRegToLog(regName, validName); gScnr.Ident(name2); regName := SHORT(name2$); - UNTIL ~gScnr.done OR ~validName; - TurnTargetToPrevState; - LogCmdrEnd; Log.Ln; ShowTargetState - END ReadRegister; - - PROCEDURE WriteRegister * ; - (** parameters: regAssignment {regAssignment} "¿¿E". regAssignment = regName "=" value. - Loads the listed registers with the given values. - *) - VAR - regName: Name; c: CHAR; val: INTEGER; validName: BOOLEAN; - name2: ARRAY 32 OF CHAR; - BEGIN - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - Log.Ln; Log.String("writing to register(s): "); LogXo68x32SystemCmd("ReadRegister"); Log.Ln; - LOOP - gScnr.Ident(name2); regName := SHORT(name2$); Log.Tab; Log.String(regName$); - RegDict.SelectReg(regName, validName); - IF ~gScnr.done OR ~validName THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 00); EXIT END; - gScnr.Char(c); - IF ~gScnr.done OR (c # '=') THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 4); EXIT END; - gScnr.Int(val); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 26); EXIT END; - - CASE RegDict.RegType() OF - | RegDict.UserReg: BDI.writeUserReg(RegDict.RegCode(), val); - | RegDict.SysReg: BDI.writeSysReg( RegDict.RegCode(), val); - | RegDict.CtrlReg: BDI.writeMem( RegDict.RegCode(), val, RegDict.RegSize()); - ELSE - Error(1); - END; - IF ~BDI.Done THEN Error(27); EXIT END; - IF gScnr.Next() # XU.stIdent THEN EXIT END - END; - LogCmdrEnd; Log.Ln; ShowTargetState - END WriteRegister; - - PROCEDURE ReadMemByte * ; - (** parameters: address ":" n. - Read n bytes at address and show them in System.Log (n <= 256). - *) - BEGIN ReadMem(sfByte) - END ReadMemByte; - - PROCEDURE ReadMemWord * ; - (** parameters: address ":" n. - Read n words (2 byte locations) at address and show them in System.Log (n <= 256). - Note: address must be dividable by 2, otherwise it is truncated. - *) - BEGIN ReadMem(sfShInt) - END ReadMemWord; - - PROCEDURE ReadMemLong * ; - (** parameters: address ":" n. - Read n long-words (4 byte locations) at address and show them in System.Log (n <= 256). - Note: address must be dividable by 4, otherwise it is truncated. - *) - BEGIN ReadMem(sfInt) - END ReadMemLong; - - PROCEDURE WriteMemByte * ; - (** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 1 byte. - *) - BEGIN WriteMem(sfByte) - END WriteMemByte; - - PROCEDURE WriteMemWord * ; - (** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 1 word (2 bytes). - Note: address must be dividable by 2, otherwise it is truncated. - *) - BEGIN WriteMem(sfShInt) - END WriteMemWord; - - PROCEDURE WriteMemLong * ; - (** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 1 long-word (4 bytes). - Note: address must be dividable by 4, otherwise it is truncated. - *) - BEGIN WriteMem(sfInt) - END WriteMemLong; - - PROCEDURE ResetTarget * ; - (** Resets the target board. - *) - BEGIN - BDIMain.ConnectDevice; - Done := TRUE; firstErr := 0; - BDI.reset_target; - IF BDI.Done THEN - LogLine("Target board reset"); - ELSE - LogLine("Target board reset failed"); - END - END ResetTarget; - - PROCEDURE ResetHost * ; - (** Resets the cross system. *) - VAR n: SHORTINT; - BEGIN - Done := TRUE; firstErr := 0; - IF (Dialog.platform >= Dialog.windows32s) & (Dialog.platform <= Dialog.windows98) THEN - Fcs := NIL - ELSE - Error(51) - END; - CRM.Clear; - LogLine("cross system reset"); - itemNames[0] := "*****"; itemNames[3] := "*****"; - itemNames[1] := "Byte"; itemNames[2] := "Word"; itemNames[4] := "Long"; - - (*OPT Structure Forms (standard types) *) - FOR n := 0 TO LEN(formSizes) - 1 DO formSizes[n] := 4 END; - formSizes[sfUndef] := 1; formSizes[sfSysByte] := 1; formSizes[sfBool] := 1; formSizes[sfShChar] := 1; - formSizes[sfByte] := 1; - formSizes[sfShInt] := 2; formSizes[sfReal] := 8; formSizes[sfString] := 1; - - SystemConstantsSetUp; - END ResetHost; - - PROCEDURE ResetPeripherals * ; - (** Assertion of Reset on the target board, synonymous with CPU-RESET instruction (CPU itself is not reset). - *) - BEGIN - BDIMain.ConnectDevice; - BDI.reset_peripherals; ShowTargetState - END ResetPeripherals; - - - PROCEDURE GetModName (VAR name: ARRAY OF CHAR); - BEGIN - name := ""; IF gScnr.Next() = XU.stIdent THEN gScnr.Ident(name) END; - END GetModName; - - PROCEDURE GetMemDeviceName (VAR name: ARRAY OF CHAR; VAR end: BOOLEAN); - VAR ch: CHAR; name2: ARRAY 32 OF CHAR; - BEGIN - name[0] := nul; end := FALSE; - IF gScnr.Next() = XU.stChar THEN - gScnr.Char(ch); - IF ch = '~' THEN end := TRUE - ELSIF (ch = '/') OR (ch = '\') THEN - IF gScnr.Next() = XU.stIdent THEN - gScnr.Ident(name2); name := SHORT(name2$) - ELSE - SyntaxErrorAtScnrPos(gScnr.Pos(), 6) - END; - ELSE SyntaxErrorAtScnrPos(gScnr.Pos(), 7) - END - END - END GetMemDeviceName; - - PROCEDURE LoadModules (kernelMemDeviceId: SHORTINT); - VAR - moduleName, memDeviceName: Name; - mod, memDeviceId, romDeviceId: INTEGER; end: BOOLEAN; - romBaseDmy, romSizeDmy, ramBaseDmy, ramSizeDmy: INTEGER; - BEGIN - Log.Tab; Log.String("loading modules"); Log.Ln; - CRM.Clear; Services.Collect; GetSystemConstants; CRM.Init(maxNofModules); - -(*????*) - romBaseDmy := 0; romSizeDmy := MAX(INTEGER) DIV 2 + 1; - ramBaseDmy := romSizeDmy; ramSizeDmy := romSizeDmy; - CRM.InsertMemDevice("RAM", ramBaseDmy, ramSizeDmy, ramSizeDmy, ramSizeDmy, 1, 2, FALSE); - CRM.InsertMemDevice("ROM", romBaseDmy, romSizeDmy, romSizeDmy, romSizeDmy, 1, 2, TRUE); - romDeviceId := CRM.MemDeviceId("ROM"); -(* - CRM.InsertTargetMemSegment(romBaseDmy, romSizeDmy, CRM.sgtAttributes, romDeviceId); - CRM.InsertTargetMemSegment(ramBaseDmy, ramSizeDmy, CRM.sgtAttributes, CRM.ramDeviceId); -*) - IF kernelMemDeviceId # CRM.ramDeviceId THEN kernelMemDeviceId := SHORT(romDeviceId) END; - - CRM.LoadSysMods(kernelMemDeviceId); - - ConnectGlobalScannerToCmdParams; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - LOOP - GetModName(moduleName); - IF moduleName = "" THEN EXIT END; - GetMemDeviceName(memDeviceName, end); - IF memDeviceName = "" THEN - memDeviceId := CRM.ramDeviceId - ELSE - memDeviceId := romDeviceId - END; - CRM.LoadTopMod(moduleName, SHORT(memDeviceId)); - IF ~CRM.Done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 18); EXIT END; - IF end THEN EXIT END - END; - Done := Done & CRM.Done - END LoadModules; - - (* - PROCEDURE EvaluateCodeVarSize; -VAR - moduleName, memDeviceName: Name; - mod, memDeviceId, romDeviceId: INTEGER; end: BOOLEAN; - romBaseDmy, romSizeDmy, ramBaseDmy, ramSizeDmy: INTEGER; -BEGIN - Log.Tab; Log.String("evaluating code & data size"); Log.Ln; - CRM.Clear; Services.Collect; GetSystemConstants; CRM.Init(maxNofModules); - romBaseDmy := 0; romSizeDmy := MAX(INTEGER) DIV 2 + 1; - ramBaseDmy := romSizeDmy; ramSizeDmy := romSizeDmy; - CRM.InsertMemDevice("RAM", ramBaseDmy, ramSizeDmy, ramSizeDmy, ramSizeDmy, 1, 2, FALSE); - CRM.InsertMemDevice("ROM", romBaseDmy, romSizeDmy, romSizeDmy, romSizeDmy, 1, 2, TRUE); - - romDeviceId := CRM.MemDeviceId("ROM"); - CRM.InsertTargetMemSegment(romBaseDmy, romSizeDmy, CRM.sgtAttributes, romDeviceId); - CRM.InsertTargetMemSegment(ramBaseDmy, ramSizeDmy, CRM.sgtAttributes, CRM.ramDeviceId); - - IF kernelMemDeviceId # CRM.ramDeviceId THEN kernelMemDeviceId := SHORT(romDeviceId) END; - - mod := CRM.ThisMod("TobKernel", kernelMemDeviceId); - IF mod = -1 THEN Error(17); RETURN END; - - mod := CRM.ThisMod("To68x32Oberon", kernelMemDeviceId); - IF mod = -1 THEN Error(17); RETURN END; - - ConnectGlobalScannerToCmdParams; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - LOOP - GetModName(moduleName); - IF moduleName = "" THEN EXIT END; - GetMemDeviceName(memDeviceName, end); - IF memDeviceName = "" THEN memDeviceId := CRM.ramDeviceId ELSE memDeviceId := romDeviceId END; - mod := CRM.ThisMod(moduleName, SHORT(memDeviceId)); - IF mod = -1 THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 18); EXIT END; - IF end THEN EXIT END - END; - Done := Done & CRM.Done -END EvaluateCodeVarSize; - - PROCEDURE SelectModules (kernelMemDeviceId: SHORTINT); -VAR - moduleName, memDeviceName: Name; - mod, memDeviceId: INTEGER; end: BOOLEAN; -BEGIN - mod := CRM.ThisMod("TobKernel", kernelMemDeviceId); - IF mod = -1 THEN Error(17); RETURN END; - - mod := CRM.ThisMod("To68x32Oberon", kernelMemDeviceId); - IF mod = -1 THEN Error(17); RETURN END; - - ConnectGlobalScannerToCmdParams; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - LOOP - GetModName(moduleName); - IF moduleName = "" THEN EXIT END; - GetMemDeviceName(memDeviceName, end); - IF memDeviceName = "" THEN memDeviceId := CRM.ramDeviceId - ELSE memDeviceId := CRM.MemDeviceId(memDeviceName) - END; - IF memDeviceId < 0 THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 6); EXIT END; - mod := CRM.ThisMod(moduleName, SHORT(memDeviceId)); - IF mod = -1 THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 5); EXIT END; - IF end THEN EXIT END; - END; - Done := Done & CRM.Done -END SelectModules; - - *) - PROCEDURE BuildTargetSystem; - VAR - name: Name; - startAdr, res: INTEGER; start: CRM.Command; segmAttr: SET; - memDevId, nofModules: INTEGER; end: BOOLEAN; - BEGIN - LogLine("building target system:"); Done := TRUE; -(* check command line syntax and memory device names *) -(* Oberon.Call("Target.DefineMemory", Oberon.Par, FALSE, res); *) - Dialog.Call("Xo68x32ImcTarget.DefineMemory", "error calling Xo68x32ImcTarget.DefineMemory", res); - IF res # 0 THEN Error(31); RETURN END; -(* -Log.String("Sys200"); Log.Bool(Done); Log.Ln; -*) - Log.String("XXX"); Log.Ln; - kernelMemDeviceId := CRM.ramDeviceId; anyCodeInRam := FALSE; anyCodeInReadOnly := FALSE; - ConnectGlobalScannerToCmdParams; nofModules := 0; - LOOP - IF ~Done THEN EXIT END; - GetModName(name); - IF name = "" THEN EXIT END; - INC(nofModules); - GetMemDeviceName(name, end); - IF end THEN EXIT END; - memDevId := CRM.ramDeviceId; - IF name # "" THEN memDevId := CRM.MemDeviceId(name) END; - IF memDevId < 0 THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 6); EXIT END; - anyCodeInRam := anyCodeInRam OR (memDevId = CRM.ramDeviceId); - IF ~anyCodeInReadOnly & (memDevId # CRM.ramDeviceId) THEN - anyCodeInReadOnly := TRUE; kernelMemDeviceId := SHORT(memDevId) - END; - END; - Done := Done & (nofModules > 0); - - IF Done THEN - LoadModules(kernelMemDeviceId); CRM.EvaluateCodeAndDataSize - END; - - IF Done THEN - promCodeSize := CRM.promCodeSize; ramCodeSize := CRM.ramCodeSize; - romModsVarSize := CRM.romModsVarSize + 4; ramModsVarSize := CRM.ramModsVarSize; - - sysTab[CIcodeSizeRom] := CRM.promCodeSize; - sysTab[CIcodeSizeRam] := CRM.ramCodeSize; -(* - CRM.Clear; Services.Collect; CRM.Init(maxNofModules); -*) - Dialog.Call("Xo68x32ImcTarget.DefineMemory", "error calling Xo68x32ImcTarget.DefineMemory", res); - IF res # 0 THEN Error(31) END; - END; - - IF Done THEN - IF anyCodeInReadOnly THEN - CRM.AllocateBlock(sysTabAdr, segmAttr, {CRM.sgtSystemConsts}, kernelMemDeviceId, sysTabSize); - IF sysTabAdr # CromBase THEN Error(32) END; - END; - - CRM.AllocateBlock(sysTabAdr, segmAttr, {CRM.sgtSystemVars}, CRM.ramDeviceId, sysTabSize); - IF sysTabAdr # CramBase THEN Error(33) END; - - Log.Tab; Log.String("selecting modules"); Log.Ln; - CRM.AllocateMemory -(* - SelectModules(kernelMemDeviceId); -*) - END; - - IF Done THEN - Log.Ln; Log.Tab; Log.String("number of modules:"); Log.Tab; Log.Int(CRM.nofModules); - Log.Ln; Log.Tab; Log.String("size of code in ROMs:"); Log.Tab; - LogHex(sysTab[CIcodeSizeRom]); Log.Char('='); Log.Int(sysTab[CIcodeSizeRom]); - Log.Ln; Log.Tab; Log.String("size of code in RAM:"); Log.Tab; - LogHex(sysTab[CIcodeSizeRam]); Log.Char('='); Log.Int(sysTab[CIcodeSizeRam]); - Log.String(" bytes"); Log.Ln; Log.Tab; Log.String("size of glob. vars of ROM-modules:"); Log.Tab; - LogHex(romModsVarSize); Log.Char('='); Log.Int(romModsVarSize); - Log.String(" bytes"); Log.Ln; Log.Tab; Log.String("size of glob. vars of RAM-modules:"); Log.Tab; - LogHex(ramModsVarSize); Log.Char('='); Log.Int(ramModsVarSize); Log.String(" bytes"); - Log.Ln; -(* - kernel := CRM.ThisLoadedModule("TobKernel"); start := 0; - IF kernel = 0 THEN start := CRM.ThisCommand(SHORT(kernel), "TargetStart") END; - IF start = 0 THEN Error(34) END; -*) - startAdr := CRM.StartAddress(); - INC(VcommandAdr, CRM.VarBase(CRM.kernel)) - END; - - IF Done THEN - sysTab[CIsupStackOrg] := CramBase + CramSize - safetyZoneSize; - sysTab[CIstartAdr] := startAdr; - (* sysTab[CIsupStackSize] set up by SystemConstantsSetUp *) - - sysTab[CIcodeBaseRom] := CromBase + sysTabSize; - sysTab[CIcodeBaseRam] := CramBase + sysTabSize + romModsVarSize; - - sysTab[CIramModsVarBase] := sysTab[CIcodeBaseRam] + sysTab[CIcodeSizeRam]; - sysTab[CIramModsVarSize] := ramModsVarSize; - sysTab[CIsafetyZoneVH] := sysTab[CIramModsVarBase] + ramModsVarSize; - - sysTab[CIheapBase] := sysTab[CIsafetyZoneVH] + safetyZoneSize; - - sysTab[CIsafetyZoneSSTop] := sysTab[CIsupStackOrg]; - sysTab[CIsafetyZoneUSSS] := sysTab[CIsupStackOrg] - sysTab[CIsupStackSize] - safetyZoneSize; -(* sysTab[CIuserStackSize] set up by SystemConstantsSetUp *) - sysTab[CIuserStackOrg] := sysTab[CIsafetyZoneUSSS]; - - sysTab[CIsafetyZoneHUS] := sysTab[CIuserStackOrg] - sysTab[CIuserStackSize] - safetyZoneSize; - sysTab[CIheapSize] := sysTab[CIsafetyZoneHUS] - sysTab[CIheapBase]; - - sysTab[CInofModules] := CRM.nofModules; - END; - - IF sysTab[CIheapSize] < 0 THEN Error(35) END - END BuildTargetSystem; - - PROCEDURE PutModToImageFile (module: CRM.TargetModule); - VAR - blLen, offset, targAdr: INTEGER; - codeBlock: ARRAY 256 OF INTEGER; - name: Name; - BEGIN - CRM.GetModuleName(module, name); - configTextForm.WriteTab; configTextForm.WriteString(name$); - -(* - hostAdr := CRM.HostCodeBase(modNr); hostEndAdr := hostAdr + CRM.TargConstBlockSize(modNr); - SYS.PUT(hostEndAdr-4, 55550000H); SYS.PUT(hostEndAdr-2, Fcs(hostAdr, hostEndAdr-2)); - - WHILE hostAdr < hostEndAdr DO - blSize := LEN(codeBlock)*4; - IF hostEndAdr-hostAdr < blSize THEN blSize := hostEndAdr-hostAdr END; - m := 0; blLen := blSize DIV 4; - REPEAT - SYS.GET(hostAdr, highWord); INC(hostAdr, 2); SYS.GET(hostAdr, lowWord); INC(hostAdr, 2); - codeBlock[m] := ASH(highWord, 16) + lowWord MOD 10000H; INC(m); - UNTIL m >= blLen; - ImFile.WriteDataBlock(targAdr, blLen, codeBlock); - INC(targAdr, blSize) - END; -*) -(* - CRM.PutCodeFcs(modNr); -*) - targAdr := CRM.ConstBlockBase(module); - offset := 0; - REPEAT - CRM.GetCodeBlock(module, offset, blLen, codeBlock); - ImFile.WriteDataBlock(targAdr, blLen, codeBlock); - INC(targAdr, blLen * 4); INC(offset, blLen); - UNTIL blLen < LEN(codeBlock); - - IF ~ImFile.Done THEN Error(36) END - END PutModToImageFile; - - - PROCEDURE Build * ; - (** parameters: moduleName ["/" memDeviceName] {moduleName ["/" memDeviceName]} "¿¿E". - description: Resets the target board, selects the modules given by the parameter list and all other modules according to their import lists. It then evaluates the size of code and variables, activates Target.DefineMemory and generates for each memory component an memory image file. - The memory component RAM is the default component. All code which can be loaded into the target ram is put to file "RAM.Tim". - The command Xo68x32System.LoadRam loads this image to the target ram and brings the target into the state ready to go. - *) - VAR - mod: CRM.TargetModule; - name: Name; targAdr, nofErrorsAtBegin: INTEGER; - m, n, memDeviceId: INTEGER; codeInRam, codeInReadOnly: BOOLEAN; - memDevice: CRM.MemDevice; - BEGIN - Done := TRUE; kernelMemDeviceId := - 1; - nofErrors := 0; nofErrorsAtBegin := Errors.nofErrors; - configT := TextModels.dir.New(); configTextForm.ConnectTo(configT); - XU.Register(configT, NIL, "Tim/" + configText); - (* - OutTexts.Open(configT, configHdrText, configText); - OutTexts.ShowTextInSystemViewer(configT, "^System.Menu.Text"); - Log.String("Sys100"); Log.Ln; - *) - BuildTargetSystem; - IF Done THEN - Log.Ln; Log.String("Xo68x32System: building starts"); Log.Ln; - Log.Tab; Log.Int(CRM.nofModules); Log.String(" modules will be linked"); Log.Ln; - IF CRM.nofModules > maxNofModules THEN Error(37) END; - - (* enter mod in system table and log *) - mod := CRM.FirstModule(); m := 0; - WHILE mod # NIL DO - n := CIfirstModule + 3 * m; - sysTab[n] := CRM.ConstBlockBase(CRM.selectedMod); - sysTab[n + 1] := sysTab[n] + CRM.TargConstBlockSize(CRM.selectedMod); - sysTab[n + 2] := CRM.CodeBase(CRM.selectedMod); - - CRM.GetModuleName(CRM.selectedMod, name); - Log.Ln; Log.String("module "); Log.String(name$); Log.Char(','); - Log.Tab; Log.String("systemTab[O+"); Log.Int(m); - memDeviceId := CRM.MemDeviceIdOfMod(CRM.selectedMod); - CRM.GetMemDevice(memDevice, memDeviceId); - Log.String("],"); Log.Tab; Log.String("memory device: "); Log.String(memDevice.name$); Log.Ln; - - Log.Tab; Log.String("code:"); Log.Tab; LogHex(sysTab[n]); Log.String(" .. "); LogHex(sysTab[n + 1] - 1); - Log.Tab; Log.String("size = "); LogHex(CRM.TargConstBlockSize(CRM.selectedMod)); - Log.Char('='); Log.Int(CRM.TargConstBlockSize(CRM.selectedMod)); - Log.Ln; Log.Tab; Log.String("variables:"); Log.Tab; LogHex(CRM.VarBase(CRM.selectedMod)); - Log.String(" .. "); LogHex(CRM.VarBase(CRM.selectedMod) + CRM.VarSize(CRM.selectedMod) - 1); - Log.Tab; Log.String("size = "); - LogHex(CRM.VarSize(CRM.selectedMod)); Log.Char('='); Log.Int(CRM.VarSize(CRM.selectedMod)); - Log.Ln; Log.Tab; Log.String("body:"); Log.Tab; LogHex(sysTab[n + 2]); - Log.Ln; - INC(m); mod := CRM.NextModule() - END; - - CRM.SortModsAccToMemDevices; - codeInRam := FALSE; codeInReadOnly := FALSE; - - mod := CRM.FirstModule(); m := 0; - WHILE mod # NIL DO - memDeviceId := CRM.MemDeviceIdOfMod(CRM.selectedMod); - codeInRam := codeInRam OR (memDeviceId = CRM.ramDeviceId); - codeInReadOnly := codeInReadOnly OR (memDeviceId # CRM.ramDeviceId); - - CRM.GetMemDevice(memDevice, memDeviceId); name := memDevice.name$; - ImFile.SetFileName(name); ImFile.OpenWrite(name$, memDeviceId); - configTextForm.WriteString("ImageFile: " + name$); configTextForm.WriteLn; - configTextForm.WriteString("Modules:"); - WHILE (CRM.selectedMod # NIL) & (CRM.MemDeviceIdOfMod(CRM.selectedMod) = memDeviceId) DO - PutModToImageFile(CRM.selectedMod); INC(m); mod := CRM.NextModule() - END; - configTextForm.WriteLn; - ImFile.Close; - END; - configTextForm.WriteLn; configTextForm.WriteString("END."); configTextForm.WriteLn; - XU.Register(configT, NIL, "Tim/" + configText); - - sysTab[LEN(sysTab^) - 1] := 55550000H; - (* - sysTab[LEN(sysTab^)-1] := 55550000H+LONG(Fcs(SYS.ADR(sysTab),SYS.ADR(sysTab)+sysTabSize-2)) MOD 10000H; - *) - systemParDefined := TRUE; - - IF codeInReadOnly THEN targAdr := CromBase ELSE targAdr := CramBase END; - - CRM.GetMemDeviceName(name, kernelMemDeviceId); - ImFile.SetFileName(name); ImFile.Append(name$); - ImFile.WriteDataBlock(targAdr, LEN(sysTab^), sysTab^); - ImFile.Close; - Log.Ln; Log.Tab; Log.String("system table put to image file: "); Log.String(name$); Log.Ln; - - IF kernelMemDeviceId # CRM.ramDeviceId THEN - name := "RAM"; ImFile.SetFileName(name); ImFile.Append(name$); - IF ~ImFile.Done THEN ImFile.OpenWrite(name$, CRM.ramDeviceId) END; - ImFile.WriteDataBlock(CramBase, LEN(sysTab^), sysTab^); - IF ~ImFile.Done THEN Error(38) END; - ImFile.Close; - Log.Ln; Log.Tab; Log.String("system table put to RAM.Tim"); - END; - (* CRM.CollectCodeDataRefBlks; Services.Collect; *) - END; - Log.Ln; Log.Tab; Log.String("system build completed with"); Log.Tab; - nofErrors := SHORT(Errors.nofErrors - nofErrorsAtBegin); - Log.Ln; Log.Tab; Log.Int(nofErrors); Log.String(" errors"); Log.Ln; Log.Ln - END Build; - - PROCEDURE LoadRam * ; -(** Preconditions: the targets Read Only Memory Deviceonents are up to date (click on Xo68x32System.CheckReadOnlyMem) - there is an image file RAM.Tim - if neccessary, click on Xo68x32System.Build to update all images -Description: the image in file RAM.Tim is loaded to the target ram. -Postconditions: the target is ready to go: click on: Xo68x32System.TargetGo -*) - VAR - codeBlock: ARRAY 256 OF INTEGER; name: Name; adr, len: INTEGER; - res, n, dataLength, recLength, i: INTEGER; - data: ARRAY MAX_NOF_LONGS_FILL OF INTEGER; - firstAddrSet: BOOLEAN; index: INTEGER; - BEGIN - ResetTarget; - Dialog.Call("Xo68x32ImcTarget.Init", "error calling Xo68x32ImcTarget.Init", res); - IF res # 0 THEN Error(39) END; - IF ~Done OR ~BDI.Done THEN Error(40); RETURN END; - Log.Tab; Log.String("controller reset and initialised"); Log.Ln; - - Log.Ln; Log.String("loading of target RAM from file "); - name := "RAM"; - ImFile.SetFileName(name); ImFile.OpenRead(name$); Log.String(name$); Log.Ln; - (* - Log.String(" starts"); Log.Ln; - *) - - IF COMPARE_IMAGE THEN - firstAddrSet := FALSE; - index := 0; - FOR i := 0 TO LEN(addrList) - 1 DO - addrList[i] := 0; - END - END; - REPEAT - (* - Log.String("ReadDataBlock..."); Log.Ln; - *) - ImFile.ReadDataBlock(adr, len, codeBlock); - IF COMPARE_IMAGE THEN - IF ~firstAddrSet THEN - firstAddrSet := TRUE; - END; - FOR i := 0 TO len - 1 DO - addrList[index + i] := adr + i * 4; - dataList[index + i] := codeBlock[i] - END; - END; - (* - FOR i := 0 TO len - 1 DO - Log.String("addr: "); LogHex(adr + i*4); Log.String(", val: "); LogHex(codeBlock[i]); Log.Ln; - END; - *) - IF len > 0 THEN - (* - Log.String("**Setup address: "); LogHex(adr); Log.String(", val: "); LogHex(codeBlock[0]); Log.Ln; - *) - BDI.writeMem(adr, codeBlock[0], 4) - END; - n := 1; - WHILE (n < len) & BDI.Done DO - dataLength := MAX_NOF_LONGS_FILL; - IF len - n <= MAX_NOF_LONGS_FILL THEN - dataLength := len - n - END; - FOR i := 0 TO dataLength - 1 DO - data[i] := codeBlock[n + i]; - (* - Log.String("i: "); Log.Int(i); Log.String(", addr: "); LogHex(adr + n*4 + i*4); - Log.String(", val: "); LogHex(codeBlock[n + i]); Log.Ln; - *) - END; - (* - Log.String("Fill: dataLength: "); Log.Int(dataLength); - Log.String(" n: "); Log.Int(n); Log.String(" len: "); Log.Int(len); Log.Ln; - *) - INC(n, dataLength); - BDI.fillMem(data, dataLength); - END; - Log.Char('.'); - index := index + len; - UNTIL ImFile.eof OR ~ImFile.Done OR ~BDI.Done; - maxDataListIndex := index; - Log.Ln; - - ASSERT(ImFile.Done, 99); - ImFile.Close; - - sysTab[0] := BDI.readMem(CramBase, 4); n := 1; - REPEAT - dataLength := MAX_NOF_LONGS_FILL; - IF LEN(sysTab^) - n < MAX_NOF_LONGS_FILL THEN - dataLength := LEN(sysTab^) - n - END; -(* FIXME: LEN(data) may be too long for the last dump *) - BDI.dumpMem(LEN(data), data, recLength); - (* - Log.String("Dump: recLength: "); Log.Int(recLength); - Log.String(", LEN(sysTab^): "); Log.Int(LEN(sysTab^)); - Log.String(", n: "); Log.Int(n); Log.Ln; - *) - FOR i := 0 TO dataLength - 1 DO - sysTab[n + i] := data[i] - END; - INC(n, recLength) - UNTIL (n >= LEN(sysTab^)) OR ~BDI.Done; - - IF ~Done THEN Error(41) END; - - WriteReg("SSP", sysTab[CIsupStackOrg], Done); WriteReg("USP", sysTab[CIuserStackOrg], Done); - WriteReg("PCC", sysTab[CIstartAdr], Done); WriteReg("RPC", sysTab[CIstartAdr], Done); - WriteReg("VBR", CramBase, Done); - IF ~Done THEN Error(42) - ELSE - Log.Ln; Log.String("Xo68x32System: ram image successfully loaded"); Log.Ln; - ShowTargetState - END - END LoadRam; - - (* - PROCEDURE CheckImage*; -VAR - codeBlock: ARRAY 256 OF INTEGER; name: Name; - adr, romBase, long, len: INTEGER; n, nofIMFs: SHORTINT; ch: SHORTCHAR; error, cmpOk: BOOLEAN; -BEGIN - Done := TRUE; nofIMFs := 0; Log.Ln; - romBase := TKernelConst("CromBase"); - In.OpenTextFile("TargetConfig.Text"); - LOOP - IF ~gScnr.done THEN Error(43); EXIT END; - REPEAT - IF gScnr.Next() = Utilities.stIdent THEN gScnr.Ident(name) - ELSE gScnr.Char(ch) - END; - UNTIL ~gScnr.done OR (name="ImageFile:") OR (name="END."); - - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 44); EXIT - ELSIF name="END." THEN EXIT END; - - gScnr.Ident(name); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 45); EXIT END; - - Log.String("checking image file: "); Log.String(name); Log.Ln; - ImFile.OpenRead(name); - IF ~ImFile.Done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 46); EXIT END; - - REPEAT - ImFile.ReadDataBlock(adr, len, codeBlock); - IF len > 0 THEN BDI.ReadMem(adr, long, 4) END; - n := 0; - WHILE (n < len) & BDI.Done & (codeBlock[n]=long) DO INC(n); BDI.DumpMem(long, 4) END; - cmpOk := (n = len) & BDI.Done; - error := ~ImFile.Done OR ~cmpOk; - UNTIL ~cmpOk OR ImFile.eof OR error; - - IF (n < len) & (adr = romBase) & (len=LEN(sysTab^)) THEN - Log.String("\nsystem table at "); LogHex(adr+n*4, 0); Log.String(" has changed (might be ok)\n") - ELSIF error THEN - IF ~ImFile.Done THEN Error(47) - ELSIF ~BDI.Done THEN Error(48) - ELSE - Error(50); - Log.String("\n\tat mem loc: "); LogHex(adr+n*4, 0); - Log.String("\n\tval on target: "); LogHex(long, 0); - Log.String("\n\tval in file: "); LogHex(codeBlock[n], 0); - Log.Ln - END; - EXIT - END; - INC(nofIMFs); - END; - - IF Done THEN - IF nofIMFs > 0 THEN Log.Ln; Log.Int(nofIMFs, 0); Log.String(" image file(s) checked successfully") - ELSE Error(49) - END - ELSE - Log.String("checking terminated with errror") - END; - Log.Ln -END CheckImage; - - *) - PROCEDURE TargetGo * ; -(** Resumes execution of the target program at RPC -*) - BEGIN (* GetTargetState; *) BDI.go; ShowTargetState - END TargetGo; - - PROCEDURE TargetBreak * ; -(** Breaks execution of the target program and enters background debug mode. Click Xo68x32System.TargetGo to carry on. -*) - BEGIN - BDI.break_; - ShowTargetState - END TargetBreak; - - PROCEDURE TargetCmd * ; -(** Activates the command specified by the parameter. - Expl: Xo68x32System.TargetCmd TReflect.ChangeDot activates command ChangeDot of module TReflect on target. -*) - VAR - mod: CRM.TargetModule; cmd: CRM.Command; - name: LongName; p: INTEGER; - cmdName: ARRAY 64 OF CHAR; - name2: ARRAY 32 OF CHAR; - BEGIN - GetTargetStateAndBreak; - ConnectGlobalScannerToCmdParams; - IF gScnr.done THEN - gScnr.Ident(name2); name := SHORT(name2$); - IF ~gScnr.done THEN RETURN END; - Strings.Find(name$, ".", 0, p); - IF p = 0 THEN RETURN END; - Log.String("target cmd: "); Log.String(name$); - Strings.Extract(name$, p + 1, LEN(name$) - p - 1, cmdName); - name[p] := 0X; - mod := CRM.ThisLoadedModule(name); cmd := 0; - IF mod # NIL THEN cmd := CRM.ThisCommand(mod, SHORT(cmdName$)) END; - IF cmd # 0 THEN - Log.String(" ["); LogHex(cmd); Log.Char('['); Log.Ln; - BDI.writeMem(VcommandAdr, cmd, 4); - TargetGo; - ELSE - Log.String(" not found"); - END; - Log.Ln; - END; - TurnTargetToPrevState - END TargetCmd; - - - (* Execute after LoadRam to compare the Image and the downloaded data from the mc *) - PROCEDURE CompareImage * ; - VAR - startIndex, i, memData, recLength, oldAddr: INTEGER; - data: ARRAY MAX_NOF_LONGS_FILL OF INTEGER; - sameAddress: BOOLEAN; - - PROCEDURE LogListError (pos, addr, dataList, dataMC: INTEGER); - BEGIN - Log.String(" at "); Log.Int(pos); Log.String(", addr: "); Log.IntForm(addr, Log.hexadecimal, 8, ' ', FALSE); - Log.String(", dataList: "); Log.IntForm(dataList, Log.hexadecimal, 8, ' ', FALSE); - Log.String(", MC: "); Log.IntForm(dataMC, Log.hexadecimal, 8, ' ', FALSE); Log.Ln; - END LogListError; - - BEGIN - IF ~COMPARE_IMAGE THEN - Log.String("set constant COMPARE_IMAGE to TRUE first"); Log.Ln; RETURN; - END; - Log.String("CompareImage start"); Log.Ln; - startIndex := 0; - WHILE startIndex < maxDataListIndex DO - memData := BDI.readMem(addrList[startIndex], 4); - IF memData # dataList[startIndex] THEN - Log.String("ERROR"); - LogListError(0, addrList[startIndex], dataList[startIndex], memData); - END; - BDI.dumpMem(LEN(data), data, recLength); - (* Log.String("recLength: "); Log.Int(recLength); Log.Ln; *) - i := 1; sameAddress := TRUE; oldAddr := addrList[startIndex + i] - 4; - WHILE (i <= recLength) & (sameAddress) DO - IF dataList[startIndex + i] # data[i - 1] THEN - Log.String("ERROR: "); - LogListError(startIndex + i, addrList[startIndex + i], dataList[startIndex + i], data[i - 1]); - END; - (* Log.String("addrList[startIndex + i] "); Log.Int(addrList[startIndex + i]); - Log.String(", (oldAddr + 4)"); Log.Int((oldAddr + 4)); Log.Ln; *) - IF addrList[startIndex + i] # (oldAddr + 4) THEN - sameAddress := FALSE - ELSE - oldAddr := addrList[startIndex + i]; - INC(i); - END; - END; - startIndex := startIndex + i; - END; - Log.String("CompareImage done"); Log.Ln; - END CompareImage; - -BEGIN - Log.Ln; Log.String(signOnMsg); Log.Ln; ResetHost; -END Xo68x32System. diff --git a/blackbox/Xoppc/Mod/AmdFlashs.otd b/blackbox/Xoppc/Mod/AmdFlashs.otd deleted file mode 100644 index 645f2f6..0000000 --- a/blackbox/Xoppc/Mod/AmdFlashs.otd +++ /dev/null @@ -1,369 +0,0 @@ - -MODULE XoppcAmdFlashs; -(** © ProXon/ED 7.10.97 / 20.10.98 / wm 9.00 / ED 18.12.00 / 27.6.02 | *) -(* changes: - 22.10.04 UG adapted for ppc -*) - IMPORT - Log := StdLog, Dialog, Services, - UT := XdeUtilities, XE := XdeErrors, FlM := XoppcFlashMemories , BDI := UsbBDI555, TMAM := XoppcTargetMemAndMods, - S := SYSTEM, XSYS := XoppcSystem, TextModels; - - CONST - errPrefix = "Amd_"; - TargetDefineMem = "Xo68x32ImcTarget.DefineMemory"; - TargetInit = "Xo68x32ImcTarget.Init"; - -(* - thisMod="XdeAmdFlashs"; -*) - - CONST - nul = 0X; cr = 0DX; eol = cr; ht = 9X; - nyd = "<>"; (*not yet defined (number)*) - imageFileExt = ".Tim"; (** target image file extension: ".Tim" *) - - VAR - Done-: BOOLEAN; eof-: BOOLEAN; - (** Done=TRUE: vorangegangene Operation wurde erfolgreich beendet. - eof = TRUE: das Ende des Files ist nun erreicht, oder ein ENDrecord wurde gelesen. - - Done=TRUE und eot = TRUE: ENDrecord konnte noch erfolgreich gelesen werden. - *) - firstErr-: INTEGER; (** error list see CrossErrors.Text, search for Xo68x32AmdFlashs *) - - - (*cs*) - VAR - Am29LV160DSegment : TMAM.Segment; - Am29LV160DDevice: TMAM.Device; - configT: TextModels.Model; - - CONST - configText = "TargetConfig.odc"; - - PROCEDURE Error (errNr: SHORTINT); - BEGIN - IF Done THEN firstErr := firstErr; Done := FALSE END; - XE.Error("", errPrefix, errNr, TRUE) - END Error; - - PROCEDURE LogHex (val: INTEGER); - BEGIN - Log.Char('0'); Log.IntForm(val, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END LogHex; - - PROCEDURE LogWord (data: INTEGER; comment: ARRAY OF CHAR); - BEGIN - Log.Tab; Log.String(comment); Log.String(":"); Log.Tab; LogHex(data MOD 10000H); Log.Ln - END LogWord; - - PROCEDURE PutInt (adr, data: INTEGER); - BEGIN - BDI.writeMem(adr, data, 4); - END PutInt; - - PROCEDURE mirrorReadIntData (data : INTEGER): INTEGER; - VAR i: INTEGER; - ds, datas: SET; - BEGIN - ds := {}; - datas := S.VAL(SET, data); - FOR i := 0 TO 31 DO - IF i IN datas THEN - INCL(ds, 31 - i) - END; - END; - RETURN S.VAL(INTEGER, ds); - END mirrorReadIntData; - - PROCEDURE InDeviceAdr (VAR devAdr: INTEGER); - VAR adr: INTEGER; scnr: UT.Scanner; - BEGIN - UT.GetScanner("!", scnr); - IF scnr.done THEN scnr.Int(adr) END; - IF ~scnr.done THEN - Error(1); devAdr := 0 - ELSE - devAdr := adr DIV Am29LV160DSegment.size * Am29LV160DSegment.size ; - END - END InDeviceAdr; - - PROCEDURE GetChipIDsAm29LV160D (devAdr: INTEGER); - VAR data: INTEGER; res, sector: INTEGER; - VAR locSgmt: TMAM.Segment; locSgmtNr: INTEGER; - - - PROCEDURE GetSectorProtection (sector, sectAdr, sectSize: INTEGER); - BEGIN - data := BDI.readMem(sectAdr + 2 * 4, 4); - Log.Tab; Log.String("adr: "); - Log.Tab; LogHex(sectAdr); Log.String("..."); LogHex(sectAdr + sectSize - 1); - Log.Tab; - IF mirrorReadIntData(data) = 0 THEN Log.String("un") END; Log.String("protected") - END GetSectorProtection; - - - BEGIN - devAdr := devAdr DIV Am29LV160DSegment.size * Am29LV160DSegment.size ; - - Log.Ln; Log.String("getting Am29LV160D chip IDs:"); Log.Tab; Log.String("address area:"); - Log.Tab; LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + Am29LV160DSegment.size - 1); Log.Ln; - - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H); - PutInt(devAdr + 01554H, 009000900H); - - data := BDI.readMem(devAdr + 0, 4); LogWord(mirrorReadIntData(data), "manufacturer id"); (*01*) - data := BDI.readMem(devAdr + 4, 4); LogWord(mirrorReadIntData(data), "device id"); - Log.String("Sectorname:"); Log.Tab; - Log.String("Sectorbaseadress:"); Log.Tab; - Log.String("Sectorsize:"); Log.Tab; - Log.String("Sectorused:"); Log.Tab; - Log.String("Sectorattributs:"); Log.Tab; - Log.String("Sectoradressrange:"); Log.Tab; - Log.Tab; Log.String("sector protection:"); - Log.Ln; - locSgmt := Am29LV160DSegment.local; locSgmtNr := 0; - WHILE locSgmt # NIL DO - IF locSgmt.name = "" THEN Log.Int(locSgmtNr) ELSE Log.String(locSgmt.name) END; - Log.Tab; - Log.Tab; IF locSgmt.base < 0 THEN Log.String(nyd) ELSE LogHex(locSgmt.base) END; - Log.Tab; IF locSgmt.size < 0 THEN Log.String(nyd) ELSE LogHex(locSgmt.size) END; - Log.Tab; LogHex(locSgmt.used); - Log.Tab; Log.Set(locSgmt.attrs); - GetSectorProtection(locSgmtNr, devAdr, locSgmt.size); - INC(devAdr, locSgmt.size DIV Am29LV160DSegment.width); Log.Ln; - locSgmt := locSgmt.next; INC(locSgmtNr) - END; - PutInt(devAdr + 01554H, 0F000F00H); Log.Ln (*Reset*) - END GetChipIDsAm29LV160D; - - PROCEDURE ShowChipIDsAm29LV160D * ; -(** -Syntax: XdeAmdFlashs.ShowChipIDsAm29LV160D deviceAddress - -Preconditions: Target.DefineMemory defines the memory device Am29FLV160DB - target connected via BDI -Description: shows: manufacturer id, device id and sector protection -Postconditions: the device(s) is in normal reading array mode. -*) - VAR devAdr: INTEGER; - BEGIN - InDeviceAdr(devAdr); - GetChipIDsAm29LV160D(devAdr); - END ShowChipIDsAm29LV160D; - - - - PROCEDURE GetSectorAdress (sectName : TMAM.Name; VAR sectSize : INTEGER ): INTEGER; - VAR locSgmt: TMAM.Segment; locSgmtNr, adr: INTEGER; - BEGIN - locSgmt := Am29LV160DSegment.local; locSgmtNr := 0; adr := 0; - WHILE locSgmt # NIL DO - adr := adr DIV locSgmt.size * locSgmt.size; - IF locSgmt.name = "" THEN Log.Int(locSgmtNr) ELSE Log.String(locSgmt.name) END; - IF locSgmt.name = sectName THEN - sectSize := locSgmt.size DIV Am29LV160DSegment.width ; RETURN adr - ELSE - adr := adr + locSgmt.size DIV Am29LV160DSegment.width; - END; - locSgmt := locSgmt.next; INC(locSgmtNr) - END; - END GetSectorAdress; - - - PROCEDURE InSectorAdr (VAR sectorAdr, sectSize : INTEGER); - VAR scnr: UT.Scanner; - sectName : TMAM.Name; - BEGIN - UT.GetScanner("!", scnr); - IF scnr.done THEN scnr.CharSequence(sectName) END; - Log.String("Readed sector name: "); Log.String(sectName); Log.Tab; - IF ~scnr.done THEN - Error(1); sectorAdr := 0 - ELSE - sectorAdr := GetSectorAdress(sectName, sectSize); - Log.String("Sectoradress: "); LogHex(sectorAdr); Log.Ln; - END - END InSectorAdr; - - - - PROCEDURE InDumpStartAndEndAdr (VAR startAdr, endAdr: INTEGER); - VAR adr: INTEGER; scnr: UT.Scanner; - BEGIN - UT.GetScanner("!", scnr); - IF scnr.done THEN scnr.Int(adr) END; - IF ~scnr.done THEN - Error(1); startAdr := 0 - ELSE - startAdr := adr - END; - Log.Ln; Log.String("read start adress to dump: "); LogHex(startAdr); - - IF scnr.done THEN scnr.Int(adr) END; - IF ~scnr.done THEN - Error(1); endAdr := 0 - ELSE - endAdr := adr - END; - Log.Ln; Log.String("read end adress to dump: "); LogHex(endAdr); Log.Ln; - END InDumpStartAndEndAdr; - - - - PROCEDURE InSectorAdr2 (VAR sectorAdr: INTEGER); - VAR adr: INTEGER; scnr: UT.Scanner; - BEGIN - UT.GetScanner("!", scnr); - IF scnr.done THEN scnr.Int(adr) END; - IF ~scnr.done THEN - Error(1); sectorAdr := 0 - ELSE - sectorAdr := adr - END; - LogHex(sectorAdr); - END InSectorAdr2; - - - PROCEDURE WaitByDataPollInt (adr, expData, timeOut: INTEGER); - VAR endTime: LONGINT; data: INTEGER; - BEGIN - endTime := Services.Ticks() + timeOut; - REPEAT data := BDI.readMem(adr, 4) UNTIL (data = expData) OR (endTime < Services.Ticks()); - IF data # expData THEN - Error(3); Log.Tab; Log.String("at loc "); LogHex(adr); Log.Ln - END - END WaitByDataPollInt; - - - - - PROCEDURE EraseSectorAm29LV160D (sectorAdr: INTEGER); - VAR devAdr: INTEGER; - - PROCEDURE SetEraseMode; - BEGIN - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H); - PutInt(devAdr + 01554H, 01000100H); - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H) - END SetEraseMode; - - - BEGIN -(* Log.String("AmdFlashs-Erase, sector adress "); - LogHex(sectorAdr); Log.Tab;*) - devAdr := Am29LV160DSegment.base ; -(* LogHex(devAdr);*) - sectorAdr := sectorAdr - devAdr; -(* Log.Ln; Log.Tab; Log.String("erasing sector: "); - LogHex(devAdr + sectorAdr); Log.String(" .. ");*) - SetEraseMode; - PutInt(devAdr + sectorAdr , 0C000C00H); WaitByDataPollInt(devAdr + sectorAdr , 0FFFFFFFFH, 5000); - - END EraseSectorAm29LV160D; - - - PROCEDURE EraseSectAm29LV160D * ; - VAR sectAdr, sectSize: INTEGER; - BEGIN - InSectorAdr2(sectAdr); - EraseSectorAm29LV160D(sectAdr); - END EraseSectAm29LV160D; - - - PROCEDURE EraseDeviceAm29LV160D * (adr: INTEGER); - CONST expData = 0FFFFFFFFH; - VAR devAdr: INTEGER; - BEGIN - devAdr := Am29LV160DSegment.base ; - adr := adr - devAdr; - Log.Ln; Log.Tab; Log.String("erasing device(s): "); - LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + Am29LV160DDevice.size - 1); Log.Ln; - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H); - PutInt(devAdr + 01554H, 01000100H); - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H); - PutInt(devAdr + 01554H, 08000800H); - WaitByDataPollInt(devAdr, expData, 30000); - Log.Tab; Log.String("device erased! "); - END EraseDeviceAm29LV160D; - - - PROCEDURE EraseDeviceAm29LV160DCmd * ; - VAR sectAdr, sectSize: INTEGER; - BEGIN - InDeviceAdr(sectAdr); - EraseDeviceAm29LV160D(sectAdr); - END EraseDeviceAm29LV160DCmd; - - - - PROCEDURE ProgramIntAm29LV160D (adr, data: INTEGER); -(* program one int at adr *) - VAR - devAdr: INTEGER; - BEGIN - devAdr := Am29LV160DSegment.base ; - - PutInt(devAdr + 01554H, 055005500H); - PutInt(devAdr + 0AA8H, 0AA00AA00H); - PutInt(devAdr + 01554H, 05000500H); - PutInt(adr, data); - WaitByDataPollInt(adr , data, 5000); - END ProgramIntAm29LV160D; - - - PROCEDURE LoadAm29LV160D * ; -(** Preconditions: there is an image fileAm29LV160DB.Tim - if neccessary, click on XoppcSystem.Build to update all images -Description: the image in file fileAm29LV160DB.Tim is loaded to the targets flash memory devices. -Postconditions: all flash memory device sectors, touched by the records in the imagefile, - are first erased and then programed. -*) - BEGIN - - Done := TRUE; - Am29LV160DSegment := TMAM.GetSegment(NIL, "ExternalFlashAm29LV160D"); - Am29LV160DDevice := TMAM.GetDevice("Am29LV160D"); - FlM.LoadMemDevPar(Am29LV160DDevice, Am29LV160DSegment); - FlM.InstallDeviceProc(EraseDeviceAm29LV160D, EraseSectorAm29LV160D, ProgramIntAm29LV160D); - XSYS.ResetTarget; IF ~BDI.Done THEN Error(40); RETURN END; - FlM.Program("Am29LV160D", FALSE) - END LoadAm29LV160D; - - - PROCEDURE DumpIntAm29LV160D * ; - VAR - startAdr, endAdr : INTEGER; - data, i : INTEGER; - BEGIN - InDumpStartAndEndAdr(startAdr, endAdr); - FOR i := startAdr TO (endAdr) BY 4 DO - data := BDI.readMem(i , 4); - Log.String("Readed INT value at Adress "); LogHex(i); Log.String(" : "); - LogHex(data); Log.Ln; - END; - END DumpIntAm29LV160D; - - - - PROCEDURE Init * ; - BEGIN - XSYS.ResetTarget; - IF ~BDI.Done THEN Error(40); RETURN END; - Log.Tab; Log.String("controller reset and initialised"); Log.Ln; - TMAM.InitRegs; - END Init; - - -BEGIN - Init; -END XoppcAmdFlashs. - - - diff --git a/blackbox/Xoppc/Mod/System.otd b/blackbox/Xoppc/Mod/System.otd deleted file mode 100644 index f9fb92e..0000000 --- a/blackbox/Xoppc/Mod/System.otd +++ /dev/null @@ -1,1839 +0,0 @@ - -MODULE XoppcSystem; -(** © ProXon/ED 3.9.94 / 22.11.98 / 23.2.02 / 27.1.03 | *) -(** - Cross System Tool Box -*) -(* - 3.1.05, AS USB support - 27.1.05, UG ResetTarget changed, sitch off EECLK during download to minimize external noise - 22.10.04, UG flash supported - 23.1.03, ProXon/ED PROCEDURE TargetCmd -*) - IMPORT - SYS := SYSTEM, - Services, Log := StdLog, StdFolds, TextModels, TextMappers, DevCommanders, DevMarkers, Strings, Dialog, - XU := XdeUtilities, Errors := XdeErrors, BDI := UsbBDI555, BDIMain := UsbBDI, - CC := XoppcCompConsts, OPM := XoppcCompM, XE := XdeErrors, (*CRM := XoppcModules, *) - OBJ := XoppcObjRefs, TMM := XoppcTargetMemAndMods, - RegDict := XoppcTrgtRegDict, IMF := XoppcMemImageFile; - -(* constants and types *) - - CONST - COMPARE_IMAGE = TRUE; - - - CONST - signOnMsg = "NTB Cross System MPC555 V 3.1.2 / 6.1.05"; - - errPrefix = "System_"; - kernelModName = OBJ.kernelModName; - configText = "TargetConfig.odc"; configHdrText = "TargetConfigHdr.odc"; ramImageFileName = "RAM.tim"; - - CONST - nul = 0X; ht = 9X; false = 0; true = 1; newErr = 0; - safetyZoneSize = 4*4; - nofRegNamesPerLine = 8; nofRegNamesPerPage = 15; - - CONST - classpath = "D:/work/USB/eclipse/mcdp/bin"; - MAX_NOF_WORDS_FAST_DOWNLOAD = 101; - - CONST (*OPT Structure Forms (standard types) *) - (* structure forms *) - sfUndef = CC.sfUndef; sfSysByte = CC.sfSysByte; sfBool = CC.sfBool; sfShChar = CC.sfShChar; - sfByte = CC.sfByte; sfShInt = CC.sfShInt; sfInt = CC.sfInt; - sfShReal = CC.sfShReal; sfReal = CC.sfReal; - sfSet = CC.sfSet; sfByteSet = CC.sfByteSet; sfShSet = CC.sfShSet; - sfString = CC.sfString; - sfNilTyp = CC.sfNilTyp; sfNoTyp = CC.sfNoTyp; - sfPointer = CC.sfPointer; sfProcTyp = CC.sfProcTyp; sfComp = CC.sfComp; - - TYPE - Name = OPM.Name; ShortName = ARRAY 16 OF CHAR; LongName = ARRAY 64 OF CHAR; - ConstVarDesc = OBJ.ConstVarDesc; - VarDesc = RECORD (ConstVarDesc) lname: LongName; textPos, ind: INTEGER END; - SystemConstEntry = RECORD name: Name; val: INTEGER END; - - - VAR - Done-: BOOLEAN; -(** previous operation successfully completed -*) - firstErr-, nofErrors-: SHORTINT; -(** first error occured, see error list in CRErrors.Text -*) - promCodeSize-, ramCodeSize-, romModsVarSize-, ramModsVarSize- (* targVarSize- *): INTEGER; -(** promCodeSize: size of code and constants of the set of target modules loaded to target RAM. - ramCodeSize: size of code and constants of the set of target modules loaded to target RAM. - targVarSize: size of all gloabal variables of the set of target modules defined by the parameter list of the Load command. - Note: these variables may only be evaluated by the procedure DefineMemory of the module Target. Outside of the activation of this proc, the two vars are not valid. - *) -(* Variables *) - - itemNames: ARRAY 5 OF ARRAY 6 OF CHAR; - formSizes: ARRAY sfComp + 1 OF SHORTINT; - variables: ARRAY 8 OF VarDesc; nofVars: SHORTINT; - tmpTargetInDebugMode: BOOLEAN; -(* - objRdr: OPM.ObjReader; - referencePos: INTEGER; -*) - - kernItemName: Name; -(* - refTextModel: TextModels.Model; refTextRdr: TextModels.Reader; refTextScnr: TextMappers.Scanner; -*) - gScnr: XU.Scanner; (* gloabal scanner *) gScnrBeg, gScnrEnd: INTEGER; - targetCurrentAddr, targetMSR: INTEGER; - - CONST (* system table offsets *) - CIsupStackOrg = 00H; CIstartAdr = 01H; CIsupStackSize = 02H; (*CImoduleTabBase=03H;*) - CIcodeBaseRom = 04H; CIcodeSizeRom = 05H; CIcodeBaseRam = 06H; CIcodeSizeRam = 07H; - CIramModsVarBase = 08H; CIramModsVarSize = 09H; CIsafetyZoneVH = 0AH; - CIheapBase = 0CH; CIheapSize = 0DH; CIsafetyZoneHUS = 0EH; - CIuserStackOrg = 10H; CIuserStackSize = 11H; CIsafetyZoneUSSS = 12H; CIsafetyZoneSSTop = 13H; - CIsafetyZoneCode = 14H; (* 4 longs for safety zone codes *) - CImaxNofModules = 1EH; CInofModules = 1FH; - CIfirstModule = 20H; - - - VAR (* target parameters, extracted from TobKernel and/or calculated by XoppcSystem *) - systemParDefined, CwatchdogEnab: BOOLEAN; - - CromBase, CromSize, CramBase, CramSize: INTEGER; - VcommandAdr: INTEGER; (* offset of system variable Vcommand in module TobKernel *) - - VAR - kernelMemDeviceId: SHORTINT; - configT: TextModels.Model; configTextForm: TextMappers.Formatter; - - VAR (* targget/host system parameters *) - - sysTab: POINTER TO ARRAY OF INTEGER; - sysTabBase, sysTabSize, maxNofModules, vItagFcs: INTEGER; - - sysConsts: ARRAY 32 OF SystemConstEntry; nofSysConsts: INTEGER; - anyCodeInReadOnly, anyCodeInRam: BOOLEAN; - - VAR - Fcs: PROCEDURE (begin, end: INTEGER): SHORTINT; - objText: TextModels.Model; objFrm: POINTER TO TextMappers.Formatter; - - - VAR - addrList*, dataList*: ARRAY 10000 OF INTEGER; - maxDataListIndex*: INTEGER; - -(*---- debug primitives ---- (debugLog, dbgPT, dbgDetails) *) - CONST - debugLog = FALSE; (* FALSE, TRUE *) - dbgPT = debugLog; (*procedure trace*) - dbgDetails = dbgPT; (*trace details*) - PROCEDURE DlLn ; - BEGIN - IF debugLog THEN Log.Ln END - END DlLn; - - PROCEDURE DlTab ; - BEGIN - IF debugLog THEN Log.Tab END - END DlTab; - - - PROCEDURE DlChar (ch: CHAR); - BEGIN - IF debugLog THEN Log.Char(ch) END - END DlChar; - - PROCEDURE DlString (IN str: ARRAY OF CHAR); - BEGIN - IF debugLog THEN Log.String(str) END - END DlString; - - PROCEDURE DlStringLn (IN str: ARRAY OF CHAR); - BEGIN - IF debugLog THEN Log.String(str); Log.Ln END - END DlStringLn; - - - PROCEDURE DlHex (val: INTEGER); - BEGIN - IF debugLog THEN - Log.Char('0'); Log.IntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END - END DlHex; - - PROCEDURE DlLHex (val: LONGINT); - BEGIN - IF debugLog THEN - Log.IntForm(val, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END - END DlLHex; - - PROCEDURE DlInt (val: INTEGER); - BEGIN - IF debugLog THEN Log.Int(val) END - END DlInt; - - PROCEDURE DlLInt (val: LONGINT); - BEGIN - IF debugLog THEN Log.Int(val) END - END DlLInt; - - PROCEDURE DlSet (val: SET); - BEGIN - IF debugLog THEN Log.Set(val) END - END DlSet; - - PROCEDURE DlBool (val: BOOLEAN); - BEGIN - IF debugLog THEN Log.Bool(val) END - END DlBool; - - - PROCEDURE DlReal (val: REAL); - BEGIN - IF debugLog THEN Log.Real(val) END - END DlReal; - - - PROCEDURE DlBytes (bytes: ARRAY OF BYTE; len: INTEGER); - VAR n: INTEGER; - BEGIN - IF debugLog THEN - FOR n := 0 TO len - 1 DO DlTab; DlInt(bytes[n]) END - END - END DlBytes; - -(*---- end debug primitives ----*) - - - PROCEDURE Error (errNr: SHORTINT); - BEGIN - IF Done THEN firstErr := errNr; Done := FALSE END; INC(nofErrors); - XE.Error("", errPrefix, errNr, TRUE) - END Error; - - PROCEDURE SyntaxErrorAtScnrPos (pos: INTEGER; errNr: SHORTINT); - VAR errMsg: XU.String64; - BEGIN - IF Done THEN - Strings.IntToString(errNr, errMsg); - XE.GetErrorCommentByName(NIL, errPrefix + errMsg, errMsg); - IF gScnr.sc.rider # NIL THEN - DevMarkers.Insert(gScnr.Base(), pos, DevMarkers.dir.NewMsg(errMsg)); - gScnr.SetPos(gScnr.Pos() + 1); - END; - Error(errNr); Log.String(" (lokate marker)"); Log.Ln - END - END SyntaxErrorAtScnrPos; - - - PROCEDURE LogLine (s: ARRAY OF CHAR); - BEGIN - Log.String("XoppcSystem: "); Log.Tab; Log.String(s$); Log.Ln - END LogLine; - - PROCEDURE LogInt (val: INTEGER); - BEGIN - Log.Int(val) - END LogInt; - - PROCEDURE LogHex (val: INTEGER); - BEGIN - Log.Char('0'); Log.IntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END LogHex; - - PROCEDURE LogCmdr; - BEGIN - Log.View(DevCommanders.dir.New()) - END LogCmdr; - - PROCEDURE LogCmdrEnd; - BEGIN - Log.View(DevCommanders.dir.NewEnd()) - END LogCmdrEnd; - - PROCEDURE LogSystemCmd (IN cmd: ARRAY OF CHAR); - BEGIN - Log.Char(' '); LogCmdr; Log.String("XoppcSystem." + cmd) - END LogSystemCmd; - - PROCEDURE ObjFrmCmdEnd; - BEGIN - objFrm.WriteView(DevCommanders.dir.NewEnd()) - END ObjFrmCmdEnd; - - PROCEDURE ObjFrmHex (val: INTEGER); - BEGIN - objFrm.WriteChar('0'); - objFrm.WriteIntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); - objFrm.WriteChar('H') - END ObjFrmHex; - PROCEDURE WriteOpenFold; - VAR fold: StdFolds.Fold; text: TextModels.Model; - BEGIN - text := TextModels.dir.NewFromString(""); - fold := StdFolds.dir.New(StdFolds.expanded, "", text); objFrm.WriteView(fold) - END WriteOpenFold; - - PROCEDURE WriteCloseFoldAndFold; - VAR fold: StdFolds.Fold; len: INTEGER; - BEGIN - fold := StdFolds.dir.New(StdFolds.expanded, "", NIL); - objFrm.WriteView(fold); fold.Flip; len := objFrm.rider.Base().Length(); objFrm.SetPos(len) - END WriteCloseFoldAndFold; - - PROCEDURE ConnectGlobalScannerToCmdParams; - VAR parText: TextModels.Model; - BEGIN - XU.GetTextModel("@!", parText, gScnrBeg, gScnrEnd); - gScnr.ConnectTo(parText); - gScnr.SetOpts({XU.soReturnQualIdents, XU.soReturnViews}); - gScnr.SetPos(gScnrBeg) - END ConnectGlobalScannerToCmdParams; - - PROCEDURE ShowTargetState; - BEGIN - IF BDI.isTargetInDebugMode() THEN - Log.String("target in debug mode"); LogSystemCmd("TargetGo ?"); Log.Ln - ELSE - Log.String("target running"); LogSystemCmd("TargetBreak ?"); Log.Ln - END - END ShowTargetState; - - PROCEDURE GetTargetStateAndBreak; - BEGIN - tmpTargetInDebugMode := BDI.isTargetInDebugMode(); - BDIMain.ConnectDevice; - IF ~BDI.isTargetInDebugMode() THEN - IF ~BDI.isFreezeAsserted () THEN - BDI.break_ - END - END - END GetTargetStateAndBreak; - - PROCEDURE TurnTargetToPrevState; - BEGIN - IF BDI.isTargetInDebugMode () & ~tmpTargetInDebugMode THEN BDI.go END - END TurnTargetToPrevState; - - - PROCEDURE TKernelConst * (IN name: ARRAY OF CHAR): INTEGER; -(** Returns the value of any global constant of module TobKernel. name is the const name without the module name. - Note: open the file with ToppcKernelRefOpen and than fetch constants in alphabetic order to speed up. - Exmpl: ramSize := ToppcKernelConst("CintRamSize"); -*) - VAR cv: ConstVarDesc; - BEGIN - OBJ.SelectGlobalModuleItem(kernelModName, name, CC.omConst, cv); (* PrintCV(cv); Log.Ln; *) - IF cv.objMode = 0 THEN Error(13) ELSE kernItemName := cv.name$ END; - RETURN cv.valueAdr - END TKernelConst; - - - PROCEDURE TKernelVarOffset (name: ARRAY OF CHAR): INTEGER; - VAR - val: INTEGER; c0, c1: CHAR; cv: ConstVarDesc; - BEGIN - OBJ.SelectGlobalModuleItem(kernelModName, name, CC.omVar, cv); (* PrintCV(cv); Log.Ln; *) - IF cv.objMode = 0 THEN HALT(19); Error(14) ELSE kernItemName := cv.name$ END; - RETURN cv.valueAdr - END TKernelVarOffset; - - - PROCEDURE ShowSystemTable * ; -(** Shows the content of the system table in System.Log -*) - BEGIN - TMM.ShowSystemTable; - END ShowSystemTable; - - - PROCEDURE InsertVar (name: ARRAY OF CHAR; pos: INTEGER); - VAR n: INTEGER; - BEGIN - IF nofVars < LEN(variables) THEN - n := nofVars - 1; - WHILE (n >= 0) & (name < variables[n].lname) DO - variables[n + 1] := variables[n]; DEC(n) - END; - INC(n); - variables[n].lname := name$; variables[n].textPos := pos; variables[n].valueAdr := 0; - variables[n].ind := 0; variables[n].form := 0; variables[n].size := 0; variables[n].baseForm := 0; - INC(nofVars) - END - END InsertVar; - - PROCEDURE PrintVariable (n: SHORTINT); - BEGIN - Log.Ln; Log.String("Variable["); LogInt(n); Log.String("]: "); - Log.String("name="); Log.String(variables[n].name$); - Log.String(", textPos "); LogInt(variables[n].textPos); - Log.Ln; Log.Tab; Log.String("adr="); LogHex(variables[n].valueAdr); - Log.String(", ind="); LogInt(variables[n].ind); - Log.String(", form="); LogInt(variables[n].form); - Log.String(", size="); LogInt(variables[n].size); - Log.String(", baseType="); LogInt(variables[n].baseForm); Log.Ln - END PrintVariable; - -(* -PROCEDURE PrintVars; -VAR n: SHORTINT; -BEGIN - n := 0; WHILE n < nofVars DO PrintVariable(n); INC(n) END -END PrintVars; - -*) - PROCEDURE WriteRegToLog (regName: ARRAY OF CHAR; VAR done: BOOLEAN); - VAR - val: LONGINT; hexVal, size: INTEGER; - BEGIN - Log.String(regName$); Log.String(" = "); - RegDict.ReadReg(regName, val, size, done); - IF ~done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 8); RETURN END; - IF size <= 4 THEN - hexVal := SHORT(val); - IF size < 4 THEN - IF size > 1 THEN hexVal := hexVal MOD 10000H ELSE hexVal := hexVal MOD 100H END; - END; - LogHex(hexVal); Log.String("(*" ); LogInt(SHORT(val)); Log.String("*)"); Log.Ln - ELSIF size = 8 THEN - Log.Real(SYS.VAL(REAL, val)) - END - END WriteRegToLog; - - PROCEDURE OutNum (hexVal, decVal, cardinal: INTEGER); - BEGIN - objFrm.WriteString(" "); ObjFrmHex(hexVal); objFrm.WriteString("(*"); objFrm.WriteInt(decVal); - IF cardinal # 0 THEN objFrm.WriteString(" | "); objFrm.WriteInt(cardinal) END; - objFrm.WriteString("*)") - END OutNum; - - PROCEDURE OutItem (val: INTEGER; form: INTEGER); - VAR card: INTEGER; real: SHORTREAL; int: SHORTINT; short: BYTE; c: CHAR; - BEGIN - card := 0; - CASE form OF - |sfBool: - val := val MOD 100H; objFrm.WriteString(" "); ObjFrmHex(val); - IF val = 0 THEN objFrm.WriteString("(*FALSE*)") ELSE objFrm.WriteString("(*TRUE*)") END; - |sfShChar: - c := SHORT(CHR(val)); - IF (c >= ' ') & (c <= '~') THEN objFrm.WriteChar(c) ELSE objFrm.WriteChar('.') END; - - |sfByte: - short := SHORT(SHORT(val)); IF short < 0 THEN card := LONG(short) + 100H END; - OutNum(val MOD 100H, short, card) - |sfShInt: - int := SHORT(val); IF int < 0 THEN card := LONG(int) + 10000H END; - OutNum(val MOD 10000H, int, card) - |sfInt: OutNum(val, val, 0) - |sfShReal: - objFrm.WriteString(" "); real := SYS.VAL(SHORTREAL, val); objFrm.WriteReal(real); - objFrm.WriteString("(*"); ObjFrmHex(val); objFrm.WriteString("*)") - ELSE - objFrm.WriteString(" "); ObjFrmHex(val) - END - END OutItem; - - PROCEDURE ReadMemLocs (memAddr: INTEGER; itemSize, len, form, ident: INTEGER); - VAR memData, m, i: INTEGER; itemsPerLine: SHORTINT; - BEGIN - itemsPerLine := 4; IF itemSize = 1 THEN itemsPerLine := 8 END; - IF form = sfShChar THEN itemsPerLine := 256 END; - m := 0; IF len > 256 THEN len := 256 END; - LOOP - IF m = 0 THEN - memData := BDI.readMem(memAddr, itemSize); - OutItem(memData, form); m := itemsPerLine; - ELSE - memData := BDI.readMemSeq(itemSize); OutItem(memData, form) - END; - IF ~BDI.Done THEN - Error(41); EXIT - END; - INC(memAddr, LONG(itemSize)); DEC(len); IF len <= 0 THEN EXIT END; - DEC(m); - IF m = 0 THEN - ObjFrmCmdEnd; - objFrm.WriteLn; - FOR i := 1 TO ident DO objFrm.WriteTab END - END - END; - ObjFrmCmdEnd - END ReadMemLocs; - - - PROCEDURE ReadMem (form: INTEGER); - VAR c: CHAR; ch: CHAR; memAddr: INTEGER; len, itemSize: INTEGER; - BEGIN - ConnectGlobalScannerToCmdParams; - IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - itemSize := formSizes[form]; - gScnr.Int(memAddr); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 21); RETURN END; - gScnr.Char(ch); c := SHORT(ch); - IF ~gScnr.done OR (c # ':') THEN SyntaxErrorAtScnrPos(gScnr.Pos() - 1, 05); RETURN END; - gScnr.Int(len); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 23); RETURN END; - - GetTargetStateAndBreak; - objText := TextModels.dir.New(); - IF objText # NIL THEN NEW(objFrm); objFrm.ConnectTo(objText) END; - ReadMemLocs(memAddr, itemSize, len, form, 0); objFrm.WriteLn; - Log.text.Append(objText); - TurnTargetToPrevState; ShowTargetState - END ReadMem; - - - PROCEDURE TargetInitSuccessful * (done: BOOLEAN); -(** Indicates successful initialisation of the target, called by proc Init in module Target. -*) - BEGIN - Done := done; - END TargetInitSuccessful; - - PROCEDURE ReadVar * ; -(** parameters: varName {varName} "¿¿E". varName = moduleName "." variableName. - Shows the content of the variables listed in the parameter list. Var name need to be qualified by the module name. -*) - VAR - mod: TMM.TargetModule; - itemSize: INTEGER; - len, dotPos, n, timeInt, pos: INTEGER; - ident, m: INTEGER; - name: LongName; modName, impModName, varName: Name; tempName: ARRAY 32 OF CHAR; - refTextModel: TextModels.Model; c0, c1: CHAR; - name2: ARRAY 64 OF CHAR; - cv: ConstVarDesc; - - PROCEDURE ^ReadVarPointer (modName: Name; ptr: INTEGER); - PROCEDURE GetTdName (ptrTd: INTEGER; OUT name: Name); - VAR i, val, nameAdr: INTEGER; - BEGIN - nameAdr := BDI.readMem(ptrTd + CC.tdoTdNameAddr, 4); (* get adr of td name *) - len := BDI.readMem(nameAdr, 4); (* get length of name *) - INC(nameAdr, 4); - FOR i := 0 TO len - 1 DO - val := BDI.readMem(nameAdr + i, 1); name[i] := CHR(SHORT(val)) - END; - name[i] := 0X; - END GetTdName; - PROCEDURE GetTypeDesc (IN modName, tdName: Name): INTEGER; - VAR glsBase, ptrTd, i: INTEGER; name: Name; - BEGIN - glsBase := TMM.VarGlsBase( TMM.ThisLoadedModule(modName)); - ptrTd := BDI.readMem(glsBase - 4, 4); (* get pointer to first td *) - GetTdName(ptrTd, name); i := 1; - WHILE name # tdName DO - ptrTd := BDI.readMem(glsBase - 4 * i, 4); INC(i); - GetTdName(ptrTd, name) - END; - RETURN ptrTd - END GetTypeDesc; - - PROCEDURE ReadVarComplex (modName: Name; tdNr, extLevel: INTEGER; VAR adr: INTEGER); - VAR - i, k, m, memData, ptrTd, fieldCount, mno: INTEGER; - baseTypePtrOff, baseTdmodNameAdr, baseTypePrtOffset, newExtLevel: INTEGER; - tdName, baseTdName, impModName: Name; - cv: ConstVarDesc; - BEGIN - OBJ.Open(modName); OBJ.GetTdName(tdNr, tdName, fieldCount); - ptrTd := GetTypeDesc(modName, tdName); - IF extLevel = 0 THEN - objFrm.WriteChar(' '); - IF tdName[0] = "?" THEN - objFrm.WriteString("RECORD"); - ELSE - objFrm.WriteString(tdName) - END; - IF tdName[1] = "^" THEN - objFrm.WriteString(" ("); ObjFrmHex(adr); objFrm.WriteString(")"); - END; - INC(ident); - END; - WriteOpenFold; - newExtLevel := BDI.readMem(ptrTd + CC.tdoExtLevel, 4); (* get extension level *) - IF newExtLevel > 0 THEN -(* objFrm.WriteString("go to extension");objFrm.WriteLn; *) - baseTypePtrOff := BDI.readMem(ptrTd + CC.tdoBaseTdAddr, 4); (* get base type *) -(* GetTdName(baseType, baseTdName);*) -(* objFrm.WriteString("base type "); objFrm.WriteString(baseTdName); objFrm.WriteLn;*) - mno := BDI.readMem(ptrTd + CC.tdoBaseTdModNr, 4); (* get base type module nr *) - IF mno # 0 THEN -(* objFrm.WriteString("mno # 0");objFrm.WriteLn; *) - OBJ.OpenObj(modName); OBJ.GetImportModName(mno, impModName); - ReadVarComplex(impModName, ABS(baseTypePtrOff) DIV 4, newExtLevel, adr) - ELSE -(* objFrm.WriteString("mno = 0");objFrm.WriteLn; *) - ReadVarComplex(modName, ABS(baseTypePtrOff) DIV 4, newExtLevel, adr) - END; - END; - FOR i := 0 TO fieldCount - 1 DO -(* objFrm.WriteString("do field "); objFrm.WriteInt(i); objFrm.WriteLn;*) - objFrm.WriteLn; - OBJ.Open(modName); OBJ.GetTdName(tdNr, tdName, fieldCount); - FOR k := 0 TO i DO OBJ.GetTdNextField(cv) END; - FOR m := 1 TO ident DO objFrm.WriteTab END; - objFrm.WriteString(cv.name); objFrm.WriteChar(':'); - - IF cv.form = sfComp THEN - INC(adr, (- adr) MOD 4); - IF cv.baseForm = sfUndef THEN (* record *) - IF cv.mno # 0 THEN - OBJ.OpenObj(modName); OBJ.GetImportModName(cv.mno, impModName); - ReadVarComplex(impModName, cv.td, 0, adr) - ELSE - ReadVarComplex(modName, cv.td, 0, adr) - END - ELSIF cv.baseForm = sfComp THEN (* array of record *) - WHILE cv.n > 0 DO - objFrm.WriteLn; INC(ident); FOR m := 1 TO ident DO objFrm.WriteTab END; - ReadVarComplex(modName, cv.td, 0, adr); - DEC(cv.n); DEC(ident) - END - ELSIF cv.baseForm = sfPointer THEN (* array of pointer *) - WHILE cv.n > 0 DO - objFrm.WriteLn; INC(ident); FOR m := 1 TO ident DO objFrm.WriteTab END; - IF cv.mno # 0 THEN - OBJ.OpenObj(modName); OBJ.GetImportModName(cv.mno, impModName); - ReadVarPointer(impModName, adr) - ELSE - ReadVarPointer(modName, adr) - END; - INC(adr, 4); DEC(cv.n); DEC(ident) - END - ELSE (* array of base type *) - objFrm.WriteLn; INC(ident); FOR m := 1 TO ident DO objFrm.WriteTab END; - itemSize := formSizes[cv.baseForm]; - len := cv.size DIV itemSize; - INC(adr, (- adr) MOD itemSize); - ReadMemLocs(adr, itemSize, len, cv.baseForm, ident); - INC(adr, cv.size); DEC(ident); - END - ELSIF cv.form = sfPointer THEN - INC(adr, (- adr) MOD 4); - ReadVarPointer(modName, adr); - INC(adr, formSizes[sfPointer]) - ELSE (* base type *) - itemSize := formSizes[cv.form]; - len := cv.size DIV itemSize; - INC(adr, (- adr) MOD cv.size); - ReadMemLocs(adr, itemSize, len, cv.form, ident); - INC(adr, cv.size) - END; - END; - INC(adr, (- adr) MOD 4); - IF extLevel = 0 THEN DEC(ident) END; - WriteCloseFoldAndFold; - END ReadVarComplex; - PROCEDURE ReadVarPointer (modName: Name; ptr: INTEGER); - VAR tdName: Name; adr, tag, tdNr: INTEGER; - BEGIN - objFrm.WriteTab; objFrm.WriteString("POINTER TO "); - adr := BDI.readMem(ptr, 4); - IF adr = 0 THEN - objFrm.WriteString("NIL") - ELSE - tag := BDI.readMem(adr - 4, 4); (* get tag *) - GetTdName(tag, tdName); - OBJ.Open(modName); OBJ.SearchTdName(modName, tdName, tdNr); - ReadVarComplex(modName, tdNr, 0, adr); - END - END ReadVarPointer; - - BEGIN - Done := TRUE; nofVars := 0; c1 := nul; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soReturnQualIdents, XU.soReturnViews, XU.soSkipComments, XU.soScanComments}); - - IF gScnr.Next() = XU.stInt THEN gScnr.Int(timeInt) END; - pos := gScnr.Pos(); gScnr.Ident(name2); name := SHORT(name2$); - WHILE gScnr.done & (nofVars < LEN(variables)) DO - InsertVar(name, pos); pos := gScnr.Pos(); gScnr.Ident(name2); name := SHORT(name2$); - END; - IF nofVars = 0 THEN SyntaxErrorAtScnrPos(pos, 11); RETURN END; - IF gScnr.done THEN Error(19) END; - - GetTargetStateAndBreak; - n := 0; - objText := TextModels.dir.New(); - IF objText # NIL THEN NEW(objFrm); objFrm.ConnectTo(objText) END; - LOOP - name := variables[n].lname; pos := variables[n].textPos; - len := LEN(name$); Strings.Find(name$, ".", 0, dotPos); - IF (len = 0) OR (dotPos <= 0) THEN SyntaxErrorAtScnrPos(pos, 24); EXIT END; - Strings.Extract(name$, 0, dotPos, modName); - - mod := TMM.ThisLoadedModule(modName); - IF mod = NIL THEN SyntaxErrorAtScnrPos(pos, 25); EXIT END; - - Strings.Extract(name$, dotPos + 1, len - dotPos - 1, varName); - OBJ.SelectGlobalModuleItem(modName, varName, CC.omVar, cv); - IF cv.objMode = CC.omUndef THEN SyntaxErrorAtScnrPos(pos, 14); EXIT END; - - variables[n].lname := name$; - variables[n].ind := CC.omVar; - variables[n].valueAdr := cv.valueAdr + TMM.VarGlsBase(mod); - variables[n].form := cv.form; - variables[n].size := cv.size; - variables[n].baseForm := cv.baseForm; - variables[n].td := cv.td; - variables[n].mno := cv.mno; - variables[n].n := cv.n; - - objFrm.WriteString("Var: "); objFrm.WriteString(variables[n].lname$); objFrm.WriteLn; - objFrm.WriteTab; ObjFrmHex(variables[n].valueAdr); objFrm.WriteChar(':'); ident := 1; - IF variables[n].form = sfComp THEN - IF variables[n].baseForm = sfUndef THEN (* record *) - IF variables[n].mno # 0 THEN - OBJ.OpenObj(modName); OBJ.GetImportModName(variables[n].mno, impModName); - ReadVarComplex(impModName, variables[n].td, 0, variables[n].valueAdr) - ELSE - ReadVarComplex(modName, variables[n].td, 0, variables[n].valueAdr) - END - ELSIF variables[n].baseForm = sfComp THEN (* array of record *) - WHILE variables[n].n > 0 DO - objFrm.WriteLn; - INC(ident); FOR m := 1 TO ident DO objFrm.WriteTab END; - ReadVarComplex(modName, variables[n].td, 0, variables[n].valueAdr); - DEC(variables[n].n); DEC(ident) - END - ELSIF variables[n].baseForm = sfPointer THEN (* array of pointer *) - WHILE variables[n].n > 0 DO - objFrm.WriteLn; - FOR m := 1 TO ident DO objFrm.WriteTab END; - IF variables[n].mno # 0 THEN - OBJ.OpenObj(modName); OBJ.GetImportModName(variables[n].mno, impModName); - ReadVarPointer(impModName, variables[n].valueAdr) - ELSE - ReadVarPointer(modName, variables[n].valueAdr) - END; - INC(variables[n].valueAdr, 4); - DEC(variables[n].n); - END - ELSE (* array of base type *) - objFrm.WriteLn; INC(ident); FOR m := 1 TO ident DO objFrm.WriteTab END; - itemSize := formSizes[variables[n].baseForm]; - len := variables[n].size DIV itemSize; - ReadMemLocs(variables[n].valueAdr, itemSize, len, variables[n].baseForm, ident); - END - ELSIF variables[n].form = sfPointer THEN (* pointer *) - IF variables[n].mno # 0 THEN - OBJ.OpenObj(modName); OBJ.GetImportModName(variables[n].mno, impModName); - ReadVarPointer(impModName, variables[n].valueAdr) - ELSE - ReadVarPointer(modName, variables[n].valueAdr) - END; - ELSE (* base type *) - IF dbgDetails THEN DlStringLn("base type") END; - itemSize := formSizes[ variables[n].form]; - len := variables[n].size DIV itemSize; - ReadMemLocs(variables[n].valueAdr, itemSize, len, variables[n].form, 0); - END; - - objFrm.WriteLn; - INC(n); IF n >= nofVars THEN EXIT END; - -(* gScnr.Ident(name2); name := SHORT(name2$);*) - END; - Log.text.Append(objText); - TurnTargetToPrevState; ShowTargetState; - END ReadVar; - - - PROCEDURE WriteMem (form: SHORTINT); - VAR - c: CHAR; memAddr, memStartAddr, memData: INTEGER; n, itemSize: SHORTINT; - BEGIN - BDIMain.ConnectDevice; - n := 0; itemSize := formSizes[form]; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - gScnr.Int(memStartAddr); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 21); RETURN END; - gScnr.Char(c); - IF ~gScnr.done OR (c # ':') THEN SyntaxErrorAtScnrPos(gScnr.Pos() - 1, 05); RETURN END; - - gScnr.Int(memData); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 26); RETURN END; - - Log.Ln; Log.String("writing to memory:"); Log.Ln; LogHex(memStartAddr); Log.Char(':'); Log.Ln; - - GetTargetStateAndBreak; - BDI.writeMem(memStartAddr, memData, itemSize); OutItem(memData, form); - memAddr := memStartAddr; - - LOOP - IF ~BDI.Done THEN EXIT END; - INC(n, itemSize); INC(memAddr, itemSize); - IF gScnr.Next() = XU.stChar THEN - gScnr.Char(c); - IF c = '~' THEN - Log.String("~"); Log.Ln; - gScnr.Int(memAddr); IF ~gScnr.done THEN EXIT END; - gScnr.Char(c); IF ~gScnr.done OR (c # ':') THEN EXIT END; - LogHex(memAddr); Log.Char(':'); - END; - END; - gScnr.Int(memData); - IF gScnr.done THEN - BDI.writeMem(memAddr, memData, itemSize); OutItem(memData, form); - ELSE - EXIT - END; - END; - Log.Ln; LogInt(n); Log.String(" bytes written to memory"); - Log.Tab; LogSystemCmd("ReadMem"); - Log.String(itemNames[itemSize]$); Log.Char(' '); LogHex(memStartAddr); Log.String(": "); - LogInt(n DIV itemSize); LogCmdrEnd; Log.Ln; - TurnTargetToPrevState; ShowTargetState - END WriteMem; - - PROCEDURE WriteReg * (regName: ARRAY OF CHAR; val: INTEGER; VAR stillOk: BOOLEAN); -(* Sets the register defined by regName to val. regName must be member of the register dictionary (module RegDict). - stillOk := stillOk & operation successful -*) - VAR - found: BOOLEAN; - BEGIN - RegDict.WriteReg(regName, val, found); stillOk := stillOk & found; - END WriteReg; - - PROCEDURE DumpRegDictionary * ; -(** Shows the content of the register dictionary (all registers with there attributes) in System.Log. -*) - BEGIN - Log.Ln; Log.String("register dictionary"); Log.Ln; - RegDict.LogRegs; Log.Ln - END DumpRegDictionary; - -(* -PROCEDURE ClearUserRegs*; -(** Clears the user registers of the target processor (loads them with 0). -*) -VAR n: INTEGER; -BEGIN - RegDict.SelectFirstReg(); -(*edppc - FOR n := 0 TO RegDict.nofRegs-1 DO - IF RegDict.RegType() = RegDict.regTypeGPR THEN BDI.WriteUserReg(RegDict.RegCode(), 0) END; - RegDict.SelectNextReg() - END -*) -END ClearUserRegs; - -*) - PROCEDURE ReadRegister * ; -(** parameters: regName {regName} "¿¿E". - Shows the contents of the registers, listed in the parameter list. -*) - VAR - regName: Name; regReadOk: BOOLEAN; - BEGIN - Done := TRUE; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - Log.Ln; LogSystemCmd("WriteRegister"); Log.Ln; - gScnr.Ident(regName); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 00); RETURN END; - - GetTargetStateAndBreak; - REPEAT - WriteRegToLog(regName, regReadOk); gScnr.Ident(regName) - UNTIL ~gScnr.done OR ~regReadOk; - TurnTargetToPrevState; - LogCmdrEnd; Log.Ln; ShowTargetState - END ReadRegister; - - PROCEDURE WriteRegister * ; -(** parameters: regAssignment {regAssignment} "¿¿E". regAssignment = regName "=" value. - Loads the listed registers with the given values. -*) - VAR - regName: Name; c: CHAR; val, textPos: INTEGER; validName, regWrOk: BOOLEAN; - BEGIN - Done := TRUE; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - - Log.Ln; Log.String("writing to register(s): "); LogSystemCmd("ReadRegister"); Log.Ln; - LOOP - gScnr.Ident(regName); textPos := gScnr.start; - Log.String(regName); Log.Tab; - RegDict.SelectReg(regName, validName); - IF ~gScnr.done OR ~validName THEN SyntaxErrorAtScnrPos(gScnr.start, 00); EXIT END; - gScnr.Char(c); - IF ~gScnr.done OR (c # '=') THEN SyntaxErrorAtScnrPos(gScnr.start, 4); EXIT END; - gScnr.Int(val); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.start, 26); EXIT END; - - GetTargetStateAndBreak; - RegDict.WriteReg(regName, val, regWrOk); - - IF ~BDI.Done THEN Error(27); EXIT END; - IF gScnr.Next() # XU.stIdent THEN EXIT END - END; - TurnTargetToPrevState; - LogCmdrEnd; Log.Ln; ShowTargetState - END WriteRegister; - - PROCEDURE ReadMemByte * ; -(** parameters: address ":" n. - Read n bytes at address and show them in System.Log (n <= 256). -*) - BEGIN ReadMem(sfByte) - END ReadMemByte; - - PROCEDURE ReadMemShort * ; -(** parameters: address ":" n. - Read n shortInts (2 byte locations) at address and show them in System.Log (n <= 256). - Note: address must be dividable by 2, otherwise it is truncated. -*) - BEGIN ReadMem(sfShInt) - END ReadMemShort; - - PROCEDURE ReadMemInt * ; -(** parameters: address ":" n. - Read n integer units (4 byte locations) at address and show them in System.Log (n <= 256). - Note: address must be dividable by 4, otherwise it is truncated. -*) - BEGIN ReadMem(sfInt) - END ReadMemInt; - - PROCEDURE WriteMemByte * ; -(** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 1 byte. -*) - BEGIN WriteMem(sfByte) - END WriteMemByte; - - PROCEDURE WriteMemShort * ; -(** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 2 bytes. - Note: address must be dividable by 2, otherwise it is truncated. -*) - BEGIN WriteMem(sfShInt) - END WriteMemShort; - - PROCEDURE WriteMemInt * ; -(** parameters: address ":" value {value} "¿¿E". - Write the list of values to memory, starting at address. The size of each memory location is 4 bytes. - Note: address must be dividable by 4, otherwise it is truncated. -*) - BEGIN WriteMem(sfInt) - END WriteMemInt; - - PROCEDURE ResetTarget * ; -(** Resets the target board. -*) - VAR mod: TMM.TargetModule; n, pos, addr: INTEGER; varName: Name; cv: ConstVarDesc; - BEGIN - BDIMain.ConnectDevice; - firstErr := 0; n := 0; - - mod := TMM.ThisLoadedModule(kernelModName); - IF mod = NIL THEN SyntaxErrorAtScnrPos(pos, 25) END; - varName := "fprMove"; - OBJ.SelectGlobalModuleItem(kernelModName, varName, CC.omVar, cv); - IF cv.objMode = CC.omUndef THEN SyntaxErrorAtScnrPos(pos, 14) END; - addr := cv.valueAdr + TMM.VarGlsBase(mod); - - RegDict.fprMoveAddr := addr; - BDI.reset_target; - IF BDI.Done THEN - BDI.writeMem(02FC000H, 40000H, 4); (* assign pin to Freeze output *) - BDI.writeMem(02FC004H, 0FFFFFF83H, 4); (* enable bus monitor, disable watchdog timer *) - BDI.writeMem(02FC280H, 08121C100H, 4) (* SCCR, switch off EECLK for download *) - END; - IF BDI.Done THEN - Log.String("ResetTarget done"); Log.Ln - ELSE - Log.String("ResetTarget failed"); Log.Ln; - END; - END ResetTarget; - - PROCEDURE ResetHost * ; -(** Resets the cross system. -*) - VAR n: SHORTINT; - BEGIN - Done := TRUE; firstErr := 0; - IF (Dialog.platform >= Dialog.windows32s) & (Dialog.platform <= Dialog.windows98) THEN - Fcs := NIL - ELSE - Error(51) - END; - TMM.Clear; - LogLine("cross system reset"); - itemNames[0] := "*****"; itemNames[3] := "*****"; - itemNames[1] := "Byte"; itemNames[2] := "Word"; itemNames[4] := "Long"; - -(*OPT Structure Forms (standard types) *) - FOR n := 0 TO LEN(formSizes) - 1 DO formSizes[n] := 4 END; - formSizes[sfUndef] := 1; formSizes[sfSysByte] := 1; formSizes[sfBool] := 1; formSizes[sfShChar] := 1; formSizes[sfByte] := 1; - formSizes[sfShInt] := 2; formSizes[sfReal] := 8; formSizes[sfString] := 1; - -(* - SystemConstantsSetUp -*) - END ResetHost; - - - PROCEDURE Build * ; -(** parameters: moduleName ["/" memDeviceName] {moduleName ["/" memDeviceName]} "¿¿E". -description: Resets the target board, selects the modules given by the parameter list and all other modules according to their import lists. It then evaluates the size of code and variables, activates Target.DefineMemory and generates for each memory component an memory image file. - The memory component RAM is the default component. All code which can be loaded into the target ram is put to file "RAM.Tim". - The command XoppcSystem.LoadRam loads this image to the target ram and brings the target into the state ready to go. -*) - VAR - mod: TMM.TargetModule; - name: Name; targAdr, nofErrorsAtBegin: INTEGER; - m, n, memDeviceId: INTEGER; codeInRam, codeInReadOnly: BOOLEAN; - BEGIN - Done := TRUE; - nofErrors := 0; nofErrorsAtBegin := Errors.nofErrors; - configT := TextModels.dir.New(); configTextForm.ConnectTo(configT); - XU.Register(configT, NIL, "Tim/" + configText); - - Log.Ln; Log.String("XoppcSystem: building starts"); Log.Ln; - TMM.Build; - TMM.WriteImageFiles; - Done := TMM.Done; - Log.Ln; Log.Tab; Log.String("system build completed with"); Log.Tab; - nofErrors := SHORT(Errors.nofErrors - nofErrorsAtBegin); - LogInt(nofErrors); Log.String(" errors"); Log.Ln; Log.Ln - END Build; - - - PROCEDURE LoadRam * ; -(** Preconditions: the targets Read Only Memory Deviceonents are up to date (click on XoppcSystem.CheckReadOnlyMem) - there is an image file RAM.Tim - if neccessary, click on XoppcSystem.Build to update all images -Description: the image in file RAM.Tim is loaded to the target ram. -Postconditions: the target is ready to go: click on: XoppcSystem.TargetGo -*) - CONST - logOn = FALSE; - VAR - header: IMF.Header; addr, len, offset, size, intVal, fixedHdrAddr: INTEGER; res, n, downloadLength, i: INTEGER; - codeBlock: ARRAY 256 OF INTEGER; name: Name; - data: ARRAY MAX_NOF_WORDS_FAST_DOWNLOAD OF INTEGER; - firstAddrSet: BOOLEAN; index: INTEGER; - BEGIN - Done := TRUE; - ResetTarget; -(* FIXME - GetTargetStateAndBreak; -*) - - IF ~BDI.Done THEN Error(40); RETURN END; - Log.Tab; Log.String("controller reset and initialised"); Log.Ln; - - Log.Ln; Log.String("loading of target RAM from file "); - TMM.InitRegs; - - header.devName := "RAM"; Log.String(header.devName); Log.String(" starts"); Log.Ln; - IMF.OpenRead(header); - Log.String("Download:"); Log.Ln; - - IF COMPARE_IMAGE THEN - firstAddrSet := FALSE; - index := 0; - FOR i := 0 TO LEN(addrList) - 1 DO - addrList[i] := 0; - END - END; - - REPEAT - IMF.ReadDataBlock(addr, len, codeBlock); - IF COMPARE_IMAGE THEN - IF ~firstAddrSet THEN - firstAddrSet := TRUE; - END; - FOR i := 0 TO len - 1 DO - addrList[index + i] := addr + i * 4; - dataList[index + i] := codeBlock[i] - END; - END; - IF dbgDetails THEN - DlHex(addr); DlTab; DlInt(len); DlTab; DlHex(codeBlock[0]); DlTab; DlHex(codeBlock[1]); - DlLn - END; - IF len > 0 THEN - BDI.startFastDownload(addr); - IF logOn THEN - Log.String("startFastDownload: addr = "); LogHex(addr); Log.Ln; - END; - n := 0; - WHILE (n < len) & BDI.Done DO - downloadLength := MAX_NOF_WORDS_FAST_DOWNLOAD; - IF len - n < MAX_NOF_WORDS_FAST_DOWNLOAD THEN - downloadLength := len - n; - END; - FOR i := 0 TO downloadLength - 1 DO - data[i] := codeBlock[n + i]; - IF logOn THEN - Log.String("addr: "); LogHex(addr + (n + i) * 4); - Log.String(", i: "); Log.Int(i); - Log.String(", n + i: "); Log.Int(n + i); - Log.String(", val: "); LogHex(data[i]); Log.Ln; - END - END; - INC(n, downloadLength); - BDI.fastDownload(data, downloadLength); - IF logOn THEN - Log.String("downloadLength "); Log.Int(downloadLength); Log.Ln; - END - END; - BDI.stopFastDownload; - END; - Log.Char('.'); - index := index + len; - - UNTIL IMF.eof OR ~IMF.Done OR ~BDI.Done; - maxDataListIndex := index; - Log.Ln; - - ASSERT(IMF.Done, 99); - IMF.Close; - - sysTabBase := TKernelConst("sysTabAdr"); - offset := TKernelConst("stoSysTabSize") DIV 4; - - codeBlock[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - codeBlock[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n > offset) OR ~BDI.Done; - sysTabSize := codeBlock[offset]; NEW(sysTab, sysTabSize DIV 4); - - sysTab[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - sysTab[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n >= LEN(sysTab^)) OR ~BDI.Done; - - IF ~Done THEN Error(41) END; - - offset := TKernelConst("stoStacksOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 1]; size := sysTab[offset + 2]; - - BDI.setGpr31(addr + size); (* will be moved into R31 when leaving debug mode *) - - offset := TKernelConst("stackOffset"); - WriteReg("R1", addr + size + offset, Done); - - offset := TKernelConst("stoModulesOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 2]; - offset := BDI.readMem(addr, 4); (* nofPointers of ToppcKernel *) - fixedHdrAddr := addr + 4 + offset * 4; - offset := TKernelConst("cbfhoGlobVarBlkBase"); (* get globVarBlkBase*) - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("R2", intVal, Done); (* set R2 to varGlsBase of ToppcKernel *) - - VcommandAdr := TKernelVarOffset("Vcommand") + intVal; - - offset := TKernelConst("cbfhoBodyAddr"); - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("SRR0", intVal, Done); (* set to bodyAddr of ToppcKernel *) -(* WriteReg("SRR1", 02802H, Done); (* set MSR *) is done in MemMap File*) - - IF ~Done THEN Error(42) - ELSE - Log.Ln; Log.String("XoppcSystem: ram image successfully loaded"); Log.Ln; - ShowTargetState - END - END LoadRam; - - - PROCEDURE LoadRamDebug * ; -(** Preconditions: the targets Read Only Memory Deviceonents are up to date (click on XoppcSystem.CheckReadOnlyMem) - there is an image file RAM.Tim - if neccessary, click on XoppcSystem.Build to update all images -Description: the image in file RAM.Tim is loaded to the target ram. -Postconditions: the target is ready to go: click on: XoppcSystem.TargetGo -*) - CONST - logOn = TRUE; compareDirect = TRUE; compareDirectLogOn = FALSE; - VAR - header: IMF.Header; addr, len, offset, size, intVal, fixedHdrAddr: INTEGER; res, n, downloadLength, i: INTEGER; - codeBlock: ARRAY 256 OF INTEGER; name: Name; - data: ARRAY MAX_NOF_WORDS_FAST_DOWNLOAD OF INTEGER; - firstAddrSet: BOOLEAN; index: INTEGER; - BEGIN - Done := TRUE; - ResetTarget; - - IF ~BDI.Done THEN Error(40); RETURN END; - Log.Tab; Log.String("controller reset and initialised"); Log.Ln; - - Log.Ln; Log.String("loading of target RAM from file "); - TMM.InitRegs; - - header.devName := "RAM"; Log.String(header.devName); Log.String(" starts"); Log.Ln; - IMF.OpenRead(header); - Log.String("Download:"); Log.Ln; - - IF COMPARE_IMAGE THEN - firstAddrSet := FALSE; - index := 0; - FOR i := 0 TO LEN(addrList) - 1 DO - addrList[i] := 0; - END - END; - - REPEAT - IMF.ReadDataBlock(addr, len, codeBlock); - IF COMPARE_IMAGE THEN - IF ~firstAddrSet THEN - firstAddrSet := TRUE; - END; - FOR i := 0 TO len - 1 DO - addrList[index + i] := addr + i * 4; - dataList[index + i] := codeBlock[i] - END; - END; - IF dbgDetails THEN - DlHex(addr); DlTab; DlInt(len); DlTab; DlHex(codeBlock[0]); DlTab; DlHex(codeBlock[1]); - DlLn - END; - IF len > 0 THEN - (* BDI.startFastDownload(addr); *) - n := 0; - WHILE (n < len) & BDI.Done DO - downloadLength := MAX_NOF_WORDS_FAST_DOWNLOAD; - IF len - n < MAX_NOF_WORDS_FAST_DOWNLOAD THEN - downloadLength := len - n; - END; - FOR i := 0 TO downloadLength - 1 DO - data[i] := codeBlock[n + i]; - IF logOn THEN - Log.String("addr: "); LogHex(addr + (n + i) * 4); - Log.String(", i: "); Log.Int(i); - Log.String(", n + i: "); Log.Int(n + i); - Log.String(", val: "); LogHex(data[i]); Log.Ln; - END - END; - (* BDI.fastDownload(data, downloadLength); *) - FOR i := 0 TO downloadLength - 1 DO - BDI.writeMem(addr + (n + i) * 4, data[i], 4); - IF compareDirect THEN - intVal := BDI.readMem(addr + (n + i) * 4, 4); - IF codeBlock[n + i] # intVal THEN - Log.String("ERROR at "); LogHex(addr); - Log.String(", expected: "); LogHex(codeBlock[n]); - Log.String(", read: "); LogHex(intVal); Log.Ln; - END; - IF compareDirectLogOn THEN - Log.String("addr: "); LogHex(addr + (n + i) * 4); - Log.String(", val: "); LogHex(codeBlock[n + i]); - Log.String(", read: "); LogHex(intVal); - Log.Ln; - END - END - END; - IF logOn THEN - Log.String("downloadLength "); Log.Int(downloadLength); Log.Ln; - END; - INC(n, downloadLength); - END; - (* BDI.stopFastDownload; *) - END; - -(* - WHILE (n < len) & BDI.Done DO - BDI.writeMem(addr + n*4, codeBlock[n], 4); - IF compareDirect THEN - intVal := BDI.readMem(addr + n*4, 4); - IF codeBlock[n] # intVal THEN - Log.String("ERROR at "); LogHex(addr); - Log.String(", expected: "); LogHex(codeBlock[n]); - Log.String(", read: "); LogHex(intVal); Log.Ln; - END; - IF logOn THEN - Log.String("addr: "); LogHex(addr + n*4); - Log.String(", val: "); LogHex(codeBlock[n]); - Log.String(", read: "); LogHex(intVal); - Log.Ln; - END; -(* - IF addr > 0802000H THEN - intVal := BDI.readMem(0802000H, 4); - Log.String("at 0802000H: "); LogHex(intVal); Log.Ln; - intVal := BDI.readMem(0802000H, 4); - Log.String("at 0802000H: "); LogHex(intVal); Log.Ln; - HALT(35) - END -*) - END; - INC(n); - END; - END; -*) - - Log.Char('.'); - index := index + len; - UNTIL IMF.eof OR ~IMF.Done OR ~BDI.Done; - maxDataListIndex := index; - Log.Ln; - - ASSERT(IMF.Done, 99); - IMF.Close; - - sysTabBase := TKernelConst("sysTabAdr"); - offset := TKernelConst("stoSysTabSize") DIV 4; - - codeBlock[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - codeBlock[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n > offset) OR ~BDI.Done; - sysTabSize := codeBlock[offset]; NEW(sysTab, sysTabSize DIV 4); - - sysTab[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - sysTab[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n >= LEN(sysTab^)) OR ~BDI.Done; - - IF ~Done THEN Error(41) END; - - offset := TKernelConst("stoStacksOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 1]; size := sysTab[offset + 2]; - - BDI.setGpr31(addr + size); (* will be moved into R31 when leaving debug mode *) - - offset := TKernelConst("stackOffset"); - WriteReg("R1", addr + size + offset, Done); - - offset := TKernelConst("stoModulesOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 2]; - offset := BDI.readMem(addr, 4); (* nofPointers of ToppcKernel *) - fixedHdrAddr := addr + 4 + offset * 4; - offset := TKernelConst("cbfhoGlobVarBlkBase"); (* get globVarBlkBase*) - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("R2", intVal, Done); (* set R2 to varGlsBase of ToppcKernel *) - - VcommandAdr := TKernelVarOffset("Vcommand") + intVal; - - offset := TKernelConst("cbfhoBodyAddr"); - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("SRR0", intVal, Done); (* set to bodyAddr of ToppcKernel *) -(* WriteReg("SRR1", 02802H, Done); (* set MSR *) is done in MemMap File*) - - IF ~Done THEN Error(42) - ELSE - Log.Ln; Log.String("XoppcSystem: ram image successfully loaded"); Log.Ln; - ShowTargetState - END - END LoadRamDebug; - - - PROCEDURE LoadRamNew * ; -(** Preconditions: the targets Read Only Memory Deviceonents are up to date (click on XoppcSystem.CheckReadOnlyMem) - there is an image file RAM.Tim - if neccessary, click on XoppcSystem.Build to update all images -Description: the image in file RAM.Tim is loaded to the target ram. -Postconditions: the target is ready to go: click on: XoppcSystem.TargetGo -*) - CONST - logOn = TRUE; compareDirect = TRUE; compareDirectLogOn = FALSE; - VAR - header: IMF.Header; addr, len, offset, size, intVal, fixedHdrAddr: INTEGER; - n, downloadLength, i, codeBlockIndex: INTEGER; - codeBlock: ARRAY 256 OF INTEGER; name: Name; - downloadData: ARRAY MAX_NOF_WORDS_FAST_DOWNLOAD OF INTEGER; - index: INTEGER; - - PROCEDURE Min (val1, val2: INTEGER): INTEGER; - BEGIN - IF val1 > val2 THEN - RETURN val2 - ELSE - RETURN val1 - END - END Min; - - BEGIN - Done := TRUE; - ResetTarget; - - IF ~BDI.Done THEN Error(40); RETURN END; - Log.Tab; Log.String("controller reset and initialised"); Log.Ln; - - Log.Ln; Log.String("loading of target RAM from file "); - TMM.InitRegs; - - header.devName := "RAM"; Log.String(header.devName); Log.String(" starts"); Log.Ln; - IMF.OpenRead(header); - Log.String("Download:"); Log.Ln; - - IF COMPARE_IMAGE THEN - index := 0; - FOR i := 0 TO LEN(addrList) - 1 DO - addrList[i] := 0; - END - END; - - REPEAT - IMF.ReadDataBlock(addr, len, codeBlock); - IF COMPARE_IMAGE THEN - FOR i := 0 TO len - 1 DO - addrList[index + i] := addr + i * 4; - dataList[index + i] := codeBlock[i] - END - END; - IF len > 0 THEN - BDI.startFastDownload(addr); - Log.String("baseAddr = 0x"); - Log.IntForm(addr, Log.hexadecimal, 1, ' ', Log.hideBase); - Log.String(";"); Log.Ln; - Log.String("MPC555.startFastDownload(baseAddr);"); Log.Ln; - codeBlockIndex := 0; - WHILE (codeBlockIndex < len) & BDI.Done DO - downloadLength := Min(MAX_NOF_WORDS_FAST_DOWNLOAD, len - codeBlockIndex); - Log.String("length = "); Log.Int(downloadLength); Log.String(";"); Log.Ln; - FOR i := 0 TO downloadLength - 1 DO - downloadData[i] := codeBlock[codeBlockIndex + i]; - Log.String("data["); Log.Int(i); Log.String("] = 0x"); - Log.IntForm(codeBlock[codeBlockIndex + i], Log.hexadecimal, 1, ' ', Log.hideBase); - Log.String(";"); Log.Ln; - END; - BDI.fastDownload(downloadData, downloadLength); - INC(codeBlockIndex, downloadLength); - Log.String("add(baseAddr, data, length);"); Log.Ln; - Log.String("MPC555.fastDownload(data, length);"); Log.Ln; - END; - Log.String("MPC555.stopFastDownload();"); Log.Ln; - BDI.stopFastDownload; - END; - index := index + len; - UNTIL IMF.eof OR ~IMF.Done OR ~BDI.Done; - - maxDataListIndex := index; - Log.Ln; - - ASSERT(IMF.Done, 99); - IMF.Close; - - sysTabBase := TKernelConst("sysTabAdr"); - offset := TKernelConst("stoSysTabSize") DIV 4; - - codeBlock[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - codeBlock[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n > offset) OR ~BDI.Done; - sysTabSize := codeBlock[offset]; NEW(sysTab, sysTabSize DIV 4); - - sysTab[0] := BDI.readMem(sysTabBase, 4); n := 1; - REPEAT - sysTab[n] := BDI.readMemSeq(4); INC(n) - UNTIL (n >= LEN(sysTab^)) OR ~BDI.Done; - - IF ~Done THEN Error(41) END; - - offset := TKernelConst("stoStacksOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 1]; size := sysTab[offset + 2]; - - BDI.setGpr31(addr + size); (* will be moved into R31 when leaving debug mode *) - - offset := TKernelConst("stackOffset"); - WriteReg("R1", addr + size + offset, Done); - - offset := TKernelConst("stoModulesOffset") DIV 4; - offset := sysTab[offset] DIV 4; - addr := sysTab[offset + 2]; - offset := BDI.readMem(addr, 4); (* nofPointers of ToppcKernel *) - fixedHdrAddr := addr + 4 + offset * 4; - offset := TKernelConst("cbfhoGlobVarBlkBase"); (* get globVarBlkBase*) - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("R2", intVal, Done); (* set R2 to varGlsBase of ToppcKernel *) - - VcommandAdr := TKernelVarOffset("Vcommand") + intVal; - - offset := TKernelConst("cbfhoBodyAddr"); - intVal := BDI.readMem(fixedHdrAddr + offset, 4); - WriteReg("SRR0", intVal, Done); (* set to bodyAddr of ToppcKernel *) -(* WriteReg("SRR1", 02802H, Done); (* set MSR *) is done in MemMap File*) - - IF ~Done THEN Error(42) - ELSE - Log.Ln; Log.String("XoppcSystem: ram image successfully loaded"); Log.Ln; - ShowTargetState - END - END LoadRamNew; - - - - PROCEDURE LoadMem * ; - VAR - codeBlock: ARRAY 256 OF INTEGER; name: Name; addr, len: INTEGER; - res, n, memStartAddr, memData: INTEGER; c: CHAR; itemSize: SHORTINT; - data: ARRAY MAX_NOF_WORDS_FAST_DOWNLOAD OF INTEGER; - BEGIN -(* FIXME - ResetTarget; -*) - IF ~BDI.isFreezeAsserted() THEN BDI.break_ END; - - IF ~BDI.Done THEN Error(40); RETURN END; - Log.Ln; Log.String("loading of target RAM from input starts"); Log.Ln; - n := 0; itemSize := 4; - ConnectGlobalScannerToCmdParams; IF ~gScnr.done THEN Error(22); RETURN END; - gScnr.SetOpts({XU.soSkipComments, XU.soScanComments, XU.soReturnViews}); - gScnr.Int(memStartAddr); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 21); RETURN END; - gScnr.Char(c); - IF ~gScnr.done OR (c # ':') THEN SyntaxErrorAtScnrPos(gScnr.Pos() - 1, 05); RETURN END; - - gScnr.Int(memData); IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 26); RETURN END; -(* FIXME - - BDI.startFastDownload(memStartAddr); - BDI.WriteMemFast(memData); - - LOOP - IF ~BDI.Done THEN EXIT END; - INC(n, itemSize); - IF gScnr.Next() = XU.stChar THEN gScnr.Char(c); EXIT END; - gScnr.Int(memData); - IF gScnr.done THEN - BDI.WriteMemFast(memData) - ELSE - EXIT - END; - END; - BDI.stopFastDownload; - Log.Ln; - IF ~BDI.Done THEN Error(42) - ELSE - LogInt(n); Log.String(" bytes written to memory"); - Log.Tab; LogSystemCmd("ReadMem"); - Log.String(itemNames[itemSize]$); Log.Char(' '); LogHex(memStartAddr); Log.String(": "); - LogInt(n DIV itemSize); Log.Char("~"); Log.Ln; - TurnTargetToPrevState; ShowTargetState - END -*) - END LoadMem; - - -(* -PROCEDURE CheckImage*; -VAR - codeBlock: ARRAY 256 OF INTEGER; name: Name; - addr, romBase, long, len: INTEGER; n, nofIMFs: SHORTINT; ch: SHORTCHAR; error, cmpOk: BOOLEAN; -BEGIN - Done := TRUE; nofIMFs := 0; Log.Ln; - romBase := TKernelConst("CromBase"); - In.OpenTextFile("TargetConfig.Text"); - LOOP - IF ~gScnr.done THEN Error(43); EXIT END; - REPEAT - IF gScnr.Next() = Utilities.stIdent THEN gScnr.Ident(name) - ELSE gScnr.Char(ch) - END; - UNTIL ~gScnr.done OR (name="ImageFile:") OR (name="END."); - - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 44); EXIT - ELSIF name="END." THEN EXIT END; - - gScnr.Ident(name); - IF ~gScnr.done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 45); EXIT END; - - Log.String("checking image file: "); Log.String(name); Log.Ln; - IMF.OpenRead(name); - IF ~IMF.Done THEN SyntaxErrorAtScnrPos(gScnr.Pos(), 46); EXIT END; - - REPEAT - IMF.ReadDataBlock(addr, len, codeBlock); - IF len > 0 THEN BDI.ReadMem(addr, long, 4) END; - n := 0; - WHILE (n < len) & BDI.Done & (codeBlock[n]=long) DO INC(n); BDI.DumpMem(long, 4) END; - cmpOk := (n = len) & BDI.Done; - error := ~IMF.Done OR ~cmpOk; - UNTIL ~cmpOk OR IMF.eof OR error; - - IF (n < len) & (addr = romBase) & (len=LEN(sysTab^)) THEN - Log.String("\nsystem table at "); LogHex(addr+n*4, 0); Log.String(" has changed (might be ok)\n") - ELSIF error THEN - IF ~IMF.Done THEN Error(47) - ELSIF ~BDI.Done THEN Error(48) - ELSE - Error(50); - Log.String("\n\tat mem loc: "); LogHex(addr+n*4, 0); - Log.String("\n\tval on target: "); LogHex(long, 0); - Log.String("\n\tval in file: "); LogHex(codeBlock[n], 0); - Log.Ln - END; - EXIT - END; - INC(nofIMFs); - END; - - IF Done THEN - IF nofIMFs > 0 THEN Log.Ln; LogInt(nofIMFs, 0); Log.String(" image file(s) checked successfully") - ELSE Error(49) - END - ELSE - Log.String("checking terminated with errror") - END; - Log.Ln -END CheckImage; - -*) - - PROCEDURE TargetGo * ; -(** Resumes execution of the target program at RPC -*) - BEGIN - IF BDI.isFreezeAsserted() THEN BDI.go END; - ShowTargetState - END TargetGo; - - PROCEDURE TargetBreak * ; -(** Breaks execution of the target program and enters background debug mode. Click XdeSystem.TargetGo to carry on. -*) - BEGIN - IF ~BDI.isFreezeAsserted() THEN BDI.break_ END; - ShowTargetState - END TargetBreak; - - - PROCEDURE TargetCmd * ; -(** Activates the command specified by the parameter. - Expl: XoppcSystem.TargetCmd TReflect.ChangeDot activates command ChangeDot of module TReflect on target. -*) - VAR - mod: TMM.TargetModule; cmdAdr, gVarBase: TMM.Command; cmd: LONGINT; - name: LongName; p: INTEGER; - cmdName: ARRAY 64 OF CHAR; - name2: ARRAY 32 OF CHAR; - BEGIN - ConnectGlobalScannerToCmdParams; - IF gScnr.done THEN - gScnr.Ident(name2); name := SHORT(name2$); - IF ~gScnr.done THEN RETURN END; - Strings.Find(name$, ".", 0, p); - IF p = 0 THEN RETURN END; - Log.String("target cmd: "); Log.String(name$); - Strings.Extract(name$, p + 1, LEN(name$) - p - 1, cmdName); - name[p] := 0X; - mod := TMM.ThisLoadedModule(name); cmd := 0; - IF mod # NIL THEN cmd := TMM.ThisCommand(mod, SHORT(cmdName$)) END; - cmdAdr := SHORT(cmd DIV 100000000L); gVarBase := SHORT(cmd MOD 100000000L); - IF cmdAdr # 0 THEN - Log.String(" ["); LogHex(cmdAdr); Log.Char(','); LogHex(gVarBase); Log.Char('['); Log.Ln; - GetTargetStateAndBreak; - BDI.writeMem(VcommandAdr, cmdAdr, 4); - BDI.writeMem(VcommandAdr + 4, gVarBase, 4); - TargetGo - ELSE - Log.String(" not found"); Log.Ln; - END; - Log.Ln; - END - END TargetCmd; - - - (* Execute after LoadRam to compare the Image and the downloaded data from the mc *) - PROCEDURE CompareImage * ; - CONST - SHOW_ALL = FALSE; - DONT_USE_READMEMSEQ = TRUE; - VAR - startIndex, i, memData, recLength, oldAddr: INTEGER; - sameAddress: BOOLEAN; - - PROCEDURE LogListError (pos, addr, dataList, dataMC: INTEGER); - BEGIN - Log.String(" at "); Log.Int(pos); Log.String(", addr: "); Log.IntForm(addr, Log.hexadecimal, 8, ' ', FALSE); - Log.String(", dataList: "); Log.IntForm(dataList, Log.hexadecimal, 8, ' ', FALSE); - Log.String(", MC: "); Log.IntForm(dataMC, Log.hexadecimal, 8, ' ', FALSE); Log.Ln; - END LogListError; - - BEGIN - IF ~COMPARE_IMAGE THEN - Log.String("set constant COMPARE_IMAGE to TRUE first"); Log.Ln; RETURN; - END; - Log.String("CompareImage start"); Log.Ln; - startIndex := 0; i := 0; - WHILE startIndex < maxDataListIndex DO - memData := BDI.readMem(addrList[startIndex], 4); - IF SHOW_ALL THEN - LogListError(startIndex + i, addrList[startIndex], dataList[startIndex], memData); - END; - IF memData # dataList[startIndex] THEN - Log.String("ERROR1: "); - LogListError(startIndex + i, addrList[startIndex], dataList[startIndex], memData); - END; - - i := 1; - IF ~DONT_USE_READMEMSEQ THEN - sameAddress := TRUE; oldAddr := addrList[startIndex + i] - 4; - WHILE sameAddress DO - memData := BDI.readMemSeq(4); - - IF SHOW_ALL THEN - LogListError(startIndex + i, addrList[startIndex + i], dataList[startIndex + i], memData); - END; - - IF dataList[startIndex + i] # memData THEN - Log.String("ERROR2: "); - LogListError(startIndex + i, addrList[startIndex + i], dataList[startIndex + i], memData); - END; - IF addrList[startIndex + i] # (oldAddr + 4) THEN - sameAddress := FALSE - ELSE - oldAddr := addrList[startIndex + i]; - INC(i); - END - END; - END; - - (* - BDI.BDI332_dumpMem(LEN(data), data, recLength); - (* Log.String("recLength: "); Log.Int(recLength); Log.Ln; *) - i := 1; sameAddress := TRUE; oldAddr := addrList[startIndex + i] - 4; - WHILE (i <= recLength) & (sameAddress) DO - IF dataList[startIndex + i] # data[i - 1] THEN - Log.String("ERROR: "); - LogListError(startIndex + i, addrList[startIndex + i], dataList[startIndex + i], data[i - 1]); - END; - (* Log.String("addrList[startIndex + i] "); Log.Int(addrList[startIndex + i]); - Log.String(", (oldAddr + 4)"); Log.Int((oldAddr + 4)); Log.Ln; *) - IF addrList[startIndex + i] # (oldAddr + 4) THEN - sameAddress := FALSE - ELSE - oldAddr := addrList[startIndex + i]; - INC(i); - END; - END; - *) - - startIndex := startIndex + i; - END; - Log.String("CompareImage done"); Log.Ln; - END CompareImage; - - PROCEDURE DownloadTestData * ; - CONST - BASE_ADDR = 3F9BF0H; - VAR - data: ARRAY 101 OF INTEGER; - BEGIN - data[0] := 09421FFB0H; - data[1] := 0BF810040H; - data[2] := 03BE10038H; - data[3] := 03BC30000H; - data[4] := 03BA40000H; - data[5] := 03C600030H; - data[6] := 038836102H; - data[7] := 038A08000H; - data[8] := 0B0A40000H; - data[9] := 02C9E0000H; - data[10] := 04085004CH; - data[11] := 03CC00030H; - data[12] := 038E66100H; - data[13] := 039000000H; - data[14] := 0B1070000H; - data[15] := 01F9D2710H; - data[16] := 0339CFFFFH; - data[17] := 02F1C0000H; - data[18] := 04199FFF8H; - data[19] := 03D200030H; - data[20] := 039496100H; - data[21] := 039608000H; - data[22] := 0B16A0000H; - data[23] := 01F9D2710H; - data[24] := 0339CFFFFH; - data[25] := 02F9C0000H; - data[26] := 0419DFFF8H; - data[27] := 033DEFFFFH; - data[28] := 04280FFB4H; - data[29] := 0383FFFC8H; - data[30] := 0BB810040H; - data[31] := 038210050H; - data[32] := 04E800020H; - data[33] := 09421FFB0H; - data[34] := 07C0802A6H; - data[35] := 09001004CH; - data[36] := 0BFC10044H; - data[37] := 03BE10038H; - data[38] := 090410014H; - data[39] := 07FCC42E6H; - data[40] := 0387E0000H; - data[41] := 042800008H; - data[42] := 07FE00008H; - data[43] := 0383FFFC8H; - data[44] := 0BBC10044H; - data[45] := 08001004CH; - data[46] := 07C0803A6H; - data[47] := 038210050H; - data[48] := 04E800020H; - data[49] := 09421FFB8H; - data[50] := 07C0802A6H; - data[51] := 090010044H; - data[52] := 0BFA10038H; - data[53] := 03BE10038H; - data[54] := 090410014H; - data[55] := 03BC30000H; - data[56] := 03BA40000H; - data[57] := 04BFFFFA1H; - data[58] := 090620018H; - data[59] := 081820018H; - data[60] := 03C60000FH; - data[61] := 038834240H; - data[62] := 07CAC23D7H; - data[63] := 040800008H; - data[64] := 030A5FFFFH; - data[65] := 090BE0000H; - data[66] := 080C20018H; - data[67] := 038E003E8H; - data[68] := 07D063BD7H; - data[69] := 040800008H; - data[70] := 03108FFFFH; - data[71] := 0392003E8H; - data[72] := 07D484BD6H; - data[73] := 07D4A49D6H; - data[74] := 07D4A4011H; - data[75] := 040800008H; - data[76] := 0314A03E8H; - data[77] := 0B15D0000H; - data[78] := 0383FFFC8H; - data[79] := 0BBA10038H; - data[80] := 080010044H; - data[81] := 07C0803A6H; - data[82] := 038210048H; - data[83] := 04E800020H; - data[84] := 09421FF98H; - data[85] := 0BF21004CH; - data[86] := 03BE10038H; - data[87] := 03BC30000H; - data[88] := 03BA40000H; - data[89] := 03B7E0000H; - data[90] := 03B800000H; - data[91] := 07C9BE800H; - data[92] := 040840070H; - data[93] := 0A33B0000H; - data[94] := 07F9CCB78H; - data[95] := 03B40000FH; - data[96] := 0578B0001H; - data[97] := 04182000CH; - data[98] := 06B8C8000H; - data[99] := 06D9C0810H; - data[100] := 057830801H; - - BDI.startFastDownload(BASE_ADDR); - BDI.fastDownload(data, LEN(data)); - BDI.stopFastDownload; - - END DownloadTestData; - -BEGIN - Log.Ln; Log.String(signOnMsg); Log.Ln; ResetHost; -END XoppcSystem. diff --git a/blackbox/Xoppc/Mod/TrgtRegDict.otd b/blackbox/Xoppc/Mod/TrgtRegDict.otd deleted file mode 100644 index 92330ce..0000000 --- a/blackbox/Xoppc/Mod/TrgtRegDict.otd +++ /dev/null @@ -1,190 +0,0 @@ - -MODULE XoppcTrgtRegDict; -(** © ProXon/ED 3.9.94 / 22.11.98 / 4.12.00 / 14.2.02 | *) -(** target register operations*) - IMPORT - XE := XdeErrors, XU := XdeUtilities, BDI := UsbBDI555, Log := StdLog; - - CONST - errPrefix = "RegDir_"; regDictPath = "Xoppc/Rsrc/RegisterDictionary.odc"; - - TYPE - RegName* = ARRAY 8 OF CHAR; - RegDesc = RECORD - type: RegName; - size: INTEGER; - END; - - VAR - Done-: BOOLEAN; (** previous operation successfully completed *) - firstErr-: SHORTINT; (** first error occured, see error list at the end of this module *) - - regTypeTab: ARRAY 8 OF RegDesc; - curReg, curRegCode, regTextPos: INTEGER; curRegName: RegName; curRegType: RegName; - regScn: XU.Scanner; - fprMoveAddr*: INTEGER; - - PROCEDURE ClearRegAttr; - BEGIN - curReg := 0; curRegCode := 0; regTextPos := 0; - curRegType := regTypeTab[0].type; curRegName := "" - END ClearRegAttr; - - PROCEDURE Error (errNr: SHORTINT); - BEGIN - IF Done THEN firstErr := errNr; Done := FALSE END; - XE.Error("", errPrefix, errNr, TRUE); - ClearRegAttr - END Error; - - PROCEDURE LogInt (val: INTEGER); - BEGIN - Log.Int(val) - END LogInt; - - PROCEDURE LogHex (val: INTEGER); - BEGIN - Log.Char('0'); Log.IntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H') - END LogHex; - - PROCEDURE SelectRegEntry; - BEGIN - curReg := 0; - WHILE (curReg < LEN(regTypeTab)) & (regTypeTab[curReg].type # curRegType) DO - INC(curReg) - END; - IF curReg >= LEN(regTypeTab) THEN Error(6) END - END SelectRegEntry; - - PROCEDURE SelectNextReg * ; - VAR ch: CHAR; - BEGIN - regScn.Ident(curRegName); regTextPos := regScn.start; - regScn.Ident(curRegType); - regScn.Int(curRegCode); regScn.Char(ch); - IF ~regScn.done THEN - IF regScn.eot THEN - Done := FALSE; ClearRegAttr - ELSE - Error(8) - END - ELSIF ch # ';' THEN - Error(8) - ELSE - SelectRegEntry - END - END SelectNextReg; - - PROCEDURE SelectFirstReg * ; - BEGIN - IF ~Done THEN - XU.GetScanner(regDictPath, regScn); Done := TRUE; - END; - regScn.SetPos(0); SelectNextReg - END SelectFirstReg; - - PROCEDURE SelectReg * (IN name: ARRAY OF CHAR; OUT found: BOOLEAN); - BEGIN - SelectFirstReg; - WHILE Done & (name # curRegName) DO SelectNextReg END; - found := Done - END SelectReg; - - PROCEDURE LogRegs * ; - BEGIN - SelectFirstReg; - WHILE Done DO - SelectNextReg; - Log.String(curRegName); Log.Tab; Log.String(curRegType); Log.Tab; - Log.Int(curRegCode); Log.Tab; Log.Int(regTextPos); Log.Ln - END - END LogRegs; - - PROCEDURE ReadReg * (IN regName: ARRAY OF CHAR; OUT regVal: LONGINT; OUT size: INTEGER; OUT done: BOOLEAN); - BEGIN - Done := TRUE; done := TRUE; - IF curRegName # regName THEN SelectReg(regName, done) END; - IF done THEN - size := regTypeTab[curReg].size; - CASE curReg OF - | 0: - regVal := BDI.readGPR(curRegCode); - | 1: - regVal := BDI.readGPR(curRegCode); - | 2: - regVal := BDI.readSPR(curRegCode); - | 3: - regVal := BDI.readMSR(); - | 4: - regVal := BDI.readFPR(curRegCode, fprMoveAddr); - | 5: - regVal := BDI.readCR(); - | 6: - regVal := BDI.readFPSCR(); - | 7: - regVal := BDI.readMem(curRegCode, 4); - END; - done := BDI.Done - END - END ReadReg; - - PROCEDURE WriteReg * (IN regName: ARRAY OF CHAR; regVal: INTEGER; OUT done: BOOLEAN); - BEGIN - Done := TRUE; done := TRUE; - IF curRegName # regName THEN SelectReg(regName, done) END; - IF done THEN - CASE curReg OF - | 0: - BDI.writeGPR(curRegCode, regVal); - | 1: - BDI.writeGPR(curRegCode, regVal); - | 2: - BDI.writeSPR(curRegCode, regVal); - | 3: - BDI.writeMSR(regVal); - | 4: - BDI.writeFPR(curRegCode, fprMoveAddr, regVal); - | 5: - BDI.writeCR(regVal); - | 6: - BDI.writeFPSCR(regVal); - | 7: - BDI.writeMem(curRegCode, regVal, 4); - END; - done := BDI.Done - END - END WriteReg; - - PROCEDURE Clear * ; - VAR n: INTEGER; - BEGIN - Done := TRUE; firstErr := 0; - FOR n := 0 TO LEN(regTypeTab) - 1 DO - regTypeTab[0].type := "???"; regTypeTab[0].size := 4; - END - END Clear; - - PROCEDURE Init; - BEGIN - Clear; - (*__ setup stub reg type *) - regTypeTab[0].type := "???"; regTypeTab[0].size := 4; - ClearRegAttr; - - (*__ setup register types *) - regTypeTab[1].type := "GPR"; regTypeTab[1].size := 4; - regTypeTab[2].type := "SPR"; regTypeTab[2].size := 4; - regTypeTab[3].type := "MSR"; regTypeTab[3].size := 4; - regTypeTab[4].type := "FPR"; regTypeTab[4].size := 8; - regTypeTab[5].type := "CR"; regTypeTab[5].size := 4; - regTypeTab[6].type := "FPSCR"; regTypeTab[6].size := 4; - regTypeTab[7].type := "CtrlReg"; regTypeTab[7].size := 4; - XU.GetScanner(regDictPath, regScn); - IF ~regScn.done THEN Error(3) END - END Init; - - -BEGIN - Init -END XoppcTrgtRegDict. -