📄 programpratice.py.htm
字号:
padding: 0em;
}
dt {
margin-left: 2em;
}
blockquote {
margin-left: 2em;
}
/* general styles: tables */
table {
border-collapse: collapse;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 1.4em;
margin-right: -0.6em;
}
table td,table th {
padding: 0.3em 0.6em;
vertical-align: top;
text-align: left;
}
table th {
color: #E55600;
border-bottom: 1px solid #E55600;
font-weight: normal;
}
table caption {
text-align: left;
font-weight: bold;
color: #6B5D40;
margin-left: 2em;
padding: 0em;
_padding: 0em 0.6em; /* hack for IE6: it understands padding differently here */
}
table p {
text-indent: 0em;
}
/* specific styles */
h1#page-title {
font-size: 260%;
font-weight: normal;
color: #E55600;
letter-spacing: -1px;
display: block;
border: 0em;
padding: 0em;
margin: 0em;
padding-left: 0.76em; /* 2em adjusted for font size */
line-height: 100%;
background: transparent;
}
div#g_description {
font-size: 140%;
font-weight: normal;
font-style: italic;
margin-top: -0.5em;
padding-left: 1.43em; /* 2em adjusted for font size */
color: #E55600;
}
/* correcting horizontal margins for various layouts */
body#onecolumn h1#page-title, body#onecolumn div#g_description, body#onecolumn div#footer {
margin-left: 80px;
}
body#twocolumn-left h1#page-title, body#twocolumn-left div#g_description, body#twocolumn-left div#footer,
body#threecolumn h1#page-title, body#threecolumn div#g_description, body#threecolumn div#footer {
padding-left: 0em;
}
div#sidebar p,div#sidebar-alternate p { /* no space for indenting in sidebars */
text-indent: 0em;
}
div#sidebar h1,div#sidebar-alternate h1,
div#sidebar h2,div#sidebar-alternate h2,
div#sidebar h3,div#sidebar-alternate h3,
div#sidebar h4,div#sidebar-alternate h4,
div#sidebar h5,div#sidebar-alternate h5,
div#sidebar h6,div#sidebar-alternate h6 {
margin-left: 0em;
}
div#sidebar blockquote,div#sidebar-alternate blockquote {
margin-left: 1em;
}
/** END CUSTOM SKIN **/
</style><!-- Hack to avoid flash of unstyled content in IE -->
<script> </script></head><body id="onecolumn">
<div id="container">
<div class="wrapper">
<div id="header">
<div class="wrapper">
<h1 id="page-title"><div id="g_title">Program practice</div></h1>
<div style="clear: both;"></div>
<p class="description"></p><div id="g_description"><p style="text-align: right;">Decode basic stamp 2 of parallax Inc </p></div>
<div style="clear: both;"></div>
</div>
</div>
<!-- /editable --><!-- /wrapper --><!-- /header -->
<div id="main-content">
<div class="wrapper">
<div class="content-item"><div id="g_body"><ul style="font-weight: bold;"><li>Decode basic stamp 2 EEPROM data(PBASIC opcode) .<br></li></ul><pre><font color="#a020f0"></font><font color="#a020f0">import</font> sys,string,array,glob<br><br><font color="#0000ff">#files = glob.glob('*.obj')</font><br><font color="#0000ff">#i = 0</font><br><font color="#0000ff">#for fn in files:</font><br><font color="#0000ff"># print i,':', fn</font><br><font color="#0000ff"># i = i+1</font><br><font color="#0000ff">#i = int(raw_input('select name:'))</font><br><font color="#0000ff">#if i<0 or i>=len(files): </font><br><font color="#0000ff"># print 'exceed index range, quit!'</font><br><font color="#0000ff"># exit(0)</font><br><font color="#0000ff">#fn = files[i]</font><br><font color="#804040"><b>if</b></font> 0:<br> fn = '<font color="#ff00ff">0.obj</font>'<br> src1 = file(fn, "<font color="#ff00ff">rb</font>")<br> src1.seek(0x3ad)<br> lenrs = ord(src1.read(1))<br> lenr = lenrs*0x12+4<br> src1.seek(0x3af)<br> dats = src1.read(lenr)<br> orgdat=array.array('<font color="#ff00ff">B</font>', dats)<br><br> <font color="#804040"><b>for</b></font> i <font color="#804040"><b>in</b></font> range(16, lenrs*0x10-2, 16):<br> <font color="#804040"><b>del</b></font> orgdat[i]<br> <font color="#804040"><b>del</b></font> orgdat[i]<br><br> <font color="#804040"><b>del</b></font> orgdat[lenrs*0x10:]<br><font color="#804040"><b>else</b></font>:<br> fn = '<font color="#ff00ff">0.bin</font>'<br> src1 = file(fn, "<font color="#ff00ff">rb</font>")<br> dats = src1.read()<br> orgdat=array.array('<font color="#ff00ff">B</font>', dats)<br><br>i = 0<br>printorgcode = 0<br><font color="#804040"><b>if</b></font> printorgcode :<br> <font color="#804040"><b>for</b></font> d <font color="#804040"><b>in</b></font> orgdat:<br> <font color="#804040"><b>print</b></font> "<font color="#ff00ff">%02X</font>"%d,<br> i = i+1<br> <font color="#804040"><b>if</b></font> i%16 == 0: <font color="#804040"><b>print</b></font>; i=0<br><br><font color="#804040"><b>def</b></font> <font color="#008080">bintoint</font>(strdat, strlen):<br> i = j= 0<br><font color="#0000ff"># print '[%d %d]'%(len(strdat), strlen)</font><br> <font color="#804040"><b>if</b></font> strlen == 1: <font color="#804040"><b>return</b></font> 0<br> <font color="#804040"><b>for</b></font> i <font color="#804040"><b>in</b></font> range(strlen):<br> j<<=1<br> <font color="#804040"><b>if</b></font> strdat[i] == '<font color="#ff00ff">1</font>': j |= 1<br> <font color="#804040"><b>return</b></font> j<br><br><font color="#804040"><b>def</b></font> <font color="#008080">exactaddr1</font>(strdat):<br> <font color="#804040"><b>return</b></font> '<font color="#ff00ff">(%d,%03x)</font>'%(bintoint(strdat[0:3],3), bintoint(strdat[3:14],11))<br><br><font color="#804040"><b>def</b></font> <font color="#008080">exactlist</font>(strdat, strtip = ""):<br> dattp = bintoint(strdat[0:2], 2)<br> <font color="#804040"><b>if</b></font> strtip == "" : strtip = '<font color="#ff00ff">param</font>'<br> <font color="#804040"><b>if</b></font> strdat[0:4] == '<font color="#ff00ff">1101</font>':<br> outstr = strtip<br> outstr = fixout(outstr, 20)<br> strdat = strdat[3:]<br> usedlen = 0<br> lentmp = bintoint(strdat[0:2], 2)<br> totalbit = 9<br> <font color="#804040"><b>if</b></font> lentmp == 0: totalbit = 10<br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(lentmp, bintoint(strdat[2:totalbit-lentmp], totalbit-2-lentmp))<br> usedlen += totalbit-lentmp<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> outstr<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">list:%s</font>'%strdat, lentmp, strdat[2:totalbit-lentmp]<br> <font color="#804040"><b>return</b></font> strdat[usedlen:]<br> <font color="#804040"><b>if</b></font> strdat[0:4] == '<font color="#ff00ff">0111</font>':<br> outstr = strtip<br> outstr = fixout(outstr, 20)<br> strdat = strdat[4:]<br> usedlen = 0<br> lentmp = bintoint(strdat[0:2], 2)<br> totalbit = 9<br> <font color="#804040"><b>if</b></font> lentmp == 0: totalbit = 10<br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(lentmp, bintoint(strdat[2:totalbit-lentmp], totalbit-2-lentmp))<br> usedlen += totalbit-lentmp<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> outstr<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">list:%s</font>'%strdat, lentmp, strdat[2:totalbit-lentmp]<br> <font color="#804040"><b>return</b></font> strdat[usedlen:]<br> <font color="#804040"><b>if</b></font> '<font color="#ff00ff">1111</font>' == strdat[0:4]:<br> <font color="#804040"><b>return</b></font> strdat[12:]<br> <font color="#804040"><b>if</b></font> dattp == 2:<br> <font color="#804040"><b>return</b></font> de1(strdat, [strtip, 2, inddef['<font color="#ff00ff">const</font>']])<br> <font color="#804040"><b>if</b></font> dattp == 3:<br> <font color="#804040"><b>return</b></font> de1(strdat, [strtip, 3, inddef['<font color="#ff00ff">var</font>']])<br> <font color="#804040"><b>if</b></font> dattp == 1:<br> <font color="#804040"><b>return</b></font> de1(strdat, [strtip, 3, inddef['<font color="#ff00ff">var</font>']])<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">here</font>', strdat<br> codeinf = optdef[strdat[:3]];<br> codeinf[0] = strtip<br> <font color="#804040"><b>return</b></font> de1(strdat, codeinf);<br><br><font color="#804040"><b>def</b></font> <font color="#008080">funname</font>(codestr):<br> <font color="#804040"><b>if</b></font> codestr <font color="#804040"><b>in</b></font> codedef:<br> <font color="#804040"><b>return</b></font> codedef[codestr][0]<br> <font color="#804040"><b>return</b></font> codestr<br><br>codedef = {<br> <font color="#0000ff">#'0101111':['name', [[skip, type],[...]]]</font><br> '<font color="#ff00ff">0000000</font>':['<font color="#ff00ff">END</font>', [[7, 2],]],<br> '<font color="#ff00ff">0000001</font>':['<font color="#ff00ff">SLEEP</font>', [[7, 3],]],<br> '<font color="#ff00ff">0000010</font>':['<font color="#ff00ff">NAP</font>', [[7, 3],]],<br> '<font color="#ff00ff">0000011</font>':['<font color="#ff00ff">STOP</font>', [[7, 8],]],<br> '<font color="#ff00ff">0000100</font>':['<font color="#ff00ff">OUTPUT</font>', [[7, 0],]],<br> '<font color="#ff00ff">0000101</font>':['<font color="#ff00ff">HIGH</font>', [[7, 1],]],<br> '<font color="#ff00ff">0000110</font>':['<font color="#ff00ff">TOGGLE</font>', [[7, 0],]],<br> '<font color="#ff00ff">0000111</font>':['<font color="#ff00ff">LOW</font>', [[7, 5],]],<br> '<font color="#ff00ff">0001000</font>':['<font color="#ff00ff">REVERSE</font>', [[7, 4],]],<br> '<font color="#ff00ff">0001001</font>':['<font color="#ff00ff">GOTO</font>', [[7, 2],]],<br> '<font color="#ff00ff">0001010</font>':['<font color="#ff00ff">GOSUB</font>', [[15,3],]],<br> '<font color="#ff00ff">0001011</font>':['<font color="#ff00ff">RETURN</font>', [[7, 8],]],<br> '<font color="#ff00ff">0001100</font>':['<font color="#ff00ff">INPUT</font>', [[7, 3],]],<br> '<font color="#ff00ff">0001101</font>':['<font color="#ff00ff">IF</font>', [[7, 6],]],<br> '<font color="#ff00ff">0001110</font>':['<font color="#ff00ff">SWITCH</font>', [[4, 6],]],<br> '<font color="#ff00ff">0001111</font>':['<font color="#ff00ff">BRANCH</font>', [[7, 4],]],<br> '<font color="#ff00ff">0010000</font>':['<font color="#ff00ff">CHOICE</font>', [[7, 5],[4, 2],[5,12]]],<br> '<font color="#ff00ff">0010001</font>':['<font color="#ff00ff">LOOKDOWN</font>', [[10,5],[3, 2],[1,12]]],<br> '<font color="#ff00ff">0010010</font>':['<font color="#ff00ff">RANDOM</font>', [[10,2],[2,12],]],<br> '<font color="#ff00ff">0010011</font>':['<font color="#ff00ff">READ</font>', [[7, 3],[3,15],[1,12]]],<br> '<font color="#ff00ff">0010100</font>':['<font color="#ff00ff">WRITE</font>', [[7, 3],]],<br> '<font color="#ff00ff">0010101</font>':['<font color="#ff00ff">PAUSE</font>', [[7, 0],]],<br> '<font color="#ff00ff">0010110</font>':['<font color="#ff00ff">FREQOUT</font>', [[7, 0],]],<br> '<font color="#ff00ff">0010111</font>':['<font color="#ff00ff">FREQOUT</font>', [[7, 0],]],<br> '<font color="#ff00ff">0011000</font>':['<font color="#ff00ff">DTMFOUT</font>', [[7, 5],]],<br> '<font color="#ff00ff">0011001</font>':['<font color="#ff00ff">XOUT</font>', [[7, 5],]],<br> '<font color="#ff00ff">0011010</font>':['<font color="#ff00ff">=</font>', [[7, 0],]],<br> '<font color="#ff00ff">0011111</font>':['<font color="#ff00ff">=</font>', [[7, 0],]],<br> '<font color="#ff00ff">0011110</font>':['<font color="#ff00ff">=</font>', [[7, 0],]],<br> '<font color="#ff00ff">0100000</font>':['<font color="#ff00ff">DEBUG</font>', [[7, 5],]],<br> '<font color="#ff00ff">0100001</font>':['<font color="#ff00ff">SEROUT</font>', [[7, 5],]],<br> '<font color="#ff00ff">0100010</font>':['<font color="#ff00ff">SERIN</font>', [[7, 8],]],<br> '<font color="#ff00ff">0100011</font>':['<font color="#ff00ff">SERIN</font>', [[7, 5],]],<br> '<font color="#ff00ff">0100100</font>':['<font color="#ff00ff">PULSOUT</font>', [[7, 0],]],<br> '<font color="#ff00ff">0100101</font>':['<font color="#ff00ff">PULSIN</font>', [[7, 0],[3,2],[1,12]]],<br> '<font color="#ff00ff">0100110</font>':['<font color="#ff00ff">COUNT</font>', [[7, 7],]],<br> '<font color="#ff00ff">0100111</font>':['<font color="#ff00ff">SHIFTIN</font>', [[7, 5],]],<br> '<font color="#ff00ff">0101000</font>':['<font color="#ff00ff">SHIFTOUT</font>', [[7, 5],]],<br> '<font color="#ff00ff">0101001</font>':['<font color="#ff00ff">RCTIME</font>', [[10,2],[1,12]]],<br> '<font color="#ff00ff">0101010</font>':['<font color="#ff00ff">BUTTON</font>', [[10,2],[1, 3]]],<br> '<font color="#ff00ff">0101011</font>':['<font color="#ff00ff">PWM</font>', [[7, 0],]],<br> '<font color="#ff00ff">0110000</font>':['<font color="#ff00ff">NEXT</font>', [[7, 3],]],<br> '<font color="#ff00ff">0111000</font>':['<font color="#ff00ff">NEXT</font>', [[16,3],]],<br> '<font color="#ff00ff">0111001</font>':['<font color="#ff00ff">WHILE</font>', [[7, 0],[7, 0],[0, 3]]],<br> '<font color="#ff00ff">0111010</font>':['<font color="#ff00ff">UNTIL</font>', [[13,3],]],<br> '<font color="#ff00ff">0111011</font>':['<font color="#ff00ff">NEXT</font>', [[12,3],]],<br> '<font color="#ff00ff">1000000</font>':['<font color="#ff00ff">SQR</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000001</font>':['<font color="#ff00ff">ABS</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000010</font>':['<font color="#ff00ff">NOT</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000010</font>':['<font color="#ff00ff">~</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000011</font>':['<font color="#ff00ff">-</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000100</font>':['<font color="#ff00ff">DCD</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000101</font>':['<font color="#ff00ff">NCD</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000110</font>':['<font color="#ff00ff">COS</font>', [[7, 0],]],<br> '<font color="#ff00ff">1000111</font>':['<font color="#ff00ff">SIN</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001000</font>':['<font color="#ff00ff">HYP</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001001</font>':['<font color="#ff00ff">ATN</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001010</font>':['<font color="#ff00ff">& </font>', [[7, 0],]],<br> '<font color="#ff00ff">1001011</font>':['<font color="#ff00ff">|</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001100</font>':['<font color="#ff00ff">^</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001101</font>':['<font color="#ff00ff">MIN</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001110</font>':['<font color="#ff00ff">MAX</font>', [[7, 0],]],<br> '<font color="#ff00ff">1001111</font>':['<font color="#ff00ff">+</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010000</font>':['<font color="#ff00ff">-</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010001</font>':['<font color="#ff00ff">*/</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010010</font>':['<font color="#ff00ff">*</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010011</font>':['<font color="#ff00ff">**</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010100</font>':['<font color="#ff00ff">//</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010101</font>':['<font color="#ff00ff">/</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010110</font>':['<font color="#ff00ff">DIG</font>', [[7, 0],]],<br> '<font color="#ff00ff">1010111</font>':['<font color="#ff00ff"><<</font>', [[7, 0],]],<br> '<font color="#ff00ff">1011000</font>':['<font color="#ff00ff">>></font>', [[7, 0],]],<br> '<font color="#ff00ff">1011001</font>':['<font color="#ff00ff">REV</font>', [[7, 0],]],<br> '<font color="#ff00ff">1011010</font>':['<font color="#ff00ff">>=</font>', [[7, 0],]],<br> '<font color="#ff00ff">1011011</font>':['<font color="#ff00ff"><=</font>', [[7, 0],]],<br> '<font color="#ff00ff">1011100</font>':['<font color="#ff00ff">==</font>', [[7, 0],]],<br> '<font color="#ff00ff">1011101</font>':['<font color="#ff00ff"><></font>', [[7, 0],]],<br> '<font color="#ff00ff">1011110</font>':['<font color="#ff00ff">></font>', [[7, 0],]],<br> '<font color="#ff00ff">1011111</font>':['<font color="#ff00ff"><</font>', [[7, 0],]],<br>}<br><br>vardef = {<br> '<font color="#ff00ff">1110000</font>':['<font color="#ff00ff">bit</font>', [[8, 9],]],<br> '<font color="#ff00ff">1110001</font>':['<font color="#ff00ff">nib</font>', [[6, 9],]],<br> '<font color="#ff00ff">1110010</font>':['<font color="#ff00ff">byte</font>', [[5, 9],]],<br> '<font color="#ff00ff">1110011</font>':['<font color="#ff00ff">word</font>', [[4, 9],]],<br> '<font color="#ff00ff">1110100</font>':['<font color="#ff00ff">bit_array</font>', [[8, 9],]],<br> '<font color="#ff00ff">1110101</font>':['<font color="#ff00ff">nib_array</font>', [[6, 9],]],<br> '<font color="#ff00ff">1110110</font>':['<font color="#ff00ff">byte_array</font>',[[5, 9],]],<br> '<font color="#ff00ff">1110111</font>':['<font color="#ff00ff">word_array</font>',[[4, 9],]],<br> '<font color="#ff00ff">1111010</font>':['<font color="#ff00ff">byte</font>', [[5, 9],]],<br> '<font color="#ff00ff">0111010</font>':['<font color="#ff00ff">byte</font>', [[5, 9],]],<br> '<font color="#ff00ff">1111110</font>':['<font color="#ff00ff">byte</font>', [[5, 9],]],<br> '<font color="#ff00ff">1111011</font>':['<font color="#ff00ff">word</font>', [[4, 9],]],<br> '<font color="#ff00ff">0111011</font>':['<font color="#ff00ff">word</font>', [[4, 9],]],<br> '<font color="#ff00ff">1111111</font>':['<font color="#ff00ff">word</font>', [[4, 9],]],<br> '<font color="#ff00ff">1111101</font>':['<font color="#ff00ff">bit_array</font>', [[6, 9],]],<br>}<br><br>vecdef = {<br> '<font color="#ff00ff">00</font>':['<font color="#ff00ff">elem</font>', 1, 1], '<font color="#ff00ff">11</font>':['', 2, 14],<br> }<br><br>optdef = {<br> '<font color="#ff00ff">111</font>':['<font color="#ff00ff">variable</font>', 4, 2], '<font color="#ff00ff">110</font>':['<font color="#ff00ff">const</font>', 3, 1],<br> '<font color="#ff00ff">101</font>':['<font color="#ff00ff">opera</font>', 7, 0], '<font color="#ff00ff">100</font>':['<font color="#ff00ff">opera</font>', 7, 0],<br> }<br><br>parmdef = {<br> '<font color="#ff00ff">110</font>':['<font color="#ff00ff">variable</font>', 3, 2],<br> }<br><br>inddef = {'<font color="#ff00ff">general</font>':0, '<font color="#ff00ff">const</font>':1, '<font color="#ff00ff">var</font>':2, '<font color="#ff00ff">address</font>':3, '<font color="#ff00ff">addresslist</font>':4, '<font color="#ff00ff">lists</font>':5,<br> '<font color="#ff00ff">expersion</font>':7, '<font color="#ff00ff">debugin</font>':8, '<font color="#ff00ff">opera</font>':10, '<font color="#ff00ff">param expersion</font>':11, '<font color="#ff00ff">skip</font>':12<br> }<br><br><font color="#804040"><b>def</b></font> <font color="#008080">exactexp</font>(strdat, codename):<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">in exactexp</font>'<br> <font color="#804040"><b>while</b></font> strdat[0] == '<font color="#ff00ff">1</font>':<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">exactexp</font>', strdat[:30]<br> <font color="#804040"><b>if</b></font> strdat[:7] <font color="#804040"><b>in</b></font> codedef:<br> strdat = decodecode(strdat, codedef[strdat[:7]])<br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[:7] <font color="#804040"><b>in</b></font> vardef:<br> strdat = decodecode(strdat, vardef[strdat[:7]])<br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">00</font>':<br> strdat = de1(strdat, [codename, 4, 14])<br> <font color="#804040"><b>while</b></font> strdat[0:5] != '<font color="#ff00ff">11111</font>':<br> strdat = decodeexp(strdat)<br> strdat = decodeexp(strdat)<br> <font color="#804040"><b>break</b></font><br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">01</font>':<br> strdat = de1(strdat, [codename, 3, 1])<br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">10</font>':<br> strdat = de1(strdat, [codename, 3, 1])<br> <font color="#804040"><b>continue</b></font><br><br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">out exactexp</font>'<br> strdat = strdat[3:]<br> lentmp = bintoint(strdat[1:3],2)<br> totalbit = 10<br> <font color="#804040"><b>if</b></font> lentmp == 0: totalbit = 11<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> strdat, totalbit, lentmp<br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(lentmp, bintoint(strdat[3:totalbit-lentmp], <font color="#6a5acd">\</font><br> totalbit-3-lentmp))<br><br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> outstr = codename<br> outstr = fixout(outstr, 20)<br> strdat = strdat[totalbit-lentmp:]<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">out exactexp</font>'<br> <font color="#804040"><b>return</b></font> strdat[1:]<br><br><font color="#804040"><b>def</b></font> <font color="#008080">fixout</font>(outstr, splen):<br> outstr += '<font color="#ff00ff"> </font>'*(splen-len(outstr))<br> <font color="#804040"><b>return</b></font> outstr<br><br><font color="#804040"><b>def</b></font> <font color="#008080">outnum</font>(datval):<br> outstr = "<font color="#ff00ff">%-6d</font>"%datval<br> <font color="#804040"><b>if</b></font> datval > 0x20 <font color="#804040"><b>and</b></font> datval < 0x7f:<br> outstr += '<font color="#ff00ff"> ==> %c</font>'%datval<br> <font color="#804040"><b>return</b></font> fixout(outstr, 10)<br><br><font color="#804040"><b>def</b></font> <font color="#008080">de1</font>(strdat, codeinf):<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">decode:</font>', len(strdat),strdat[:50]<br> <font color="#804040"><b>global</b></font> endcnts<br> codename, skipbit, codetype = codeinf<br> <font color="#804040"><b>if</b></font> codetype == 0:<br> outstr = strdat[:skipbit]<br> <font color="#804040"><b>else</b></font>:<br> outstr = codename<br> outstr = fixout(outstr, 20)<br> usedlen = 0<br><br> <font color="#804040"><b>if</b></font> codetype == 0: <font color="#0000ff">#general code</font><br> <font color="#804040"><b>if</b></font> strdat[:7] == '<font color="#ff00ff">0000000</font>':<br> endcnts += 1<br> <font color="#804040"><b>else</b></font>:<br> endcnts = 0<br> outstr += funname(strdat[:skipbit])<br><br> <font color="#804040"><b>elif</b></font> codetype == 9: <font color="#0000ff">#var type</font><br> outstr += '<font color="#ff00ff">%04x</font>'%bintoint(strdat[7:], skipbit)<br> usedlen += 7<br> <font color="#804040"><b>elif</b></font> codetype == 12: <font color="#0000ff">#strip zero</font><br> <font color="#804040"><b>if</b></font> bintoint(strdat[skipbit:], skipbit) != 0 <font color="#804040"><b>or</b></font> len(strdat) < skipbit:<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!z</font>', strdat[:50]<br> <font color="#804040"><b>return</b></font> strdat<br><br> strdat = strdat[skipbit:]<br> <font color="#804040"><b>if</b></font> codetype == 1: <font color="#0000ff">#constant</font><br> declen = bintoint(strdat, 4)<br> usedlen = 4<br> datval = 0<br> <font color="#804040"><b>if</b></font> strdat[4] == '<font color="#ff00ff">0</font>':<br> datval = 1<<declen<br> usedlen += 1<br> <font color="#804040"><b>else</b></font>:<br> declen+=1<br> <font color="#804040"><b>if</b></font> len(strdat[4:4+declen]) != declen:<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!1:%s[%2d]</font>'%(strdat[4:], len(strdat[4:]))<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>if</b></font> declen == 1: datval = 0<br> <font color="#804040"><b>else</b></font>: datval = bintoint(strdat[4:4+declen], declen)<br> usedlen += declen<br> outstr += outnum(datval)<br> <font color="#804040"><b>elif</b></font> codetype == 2: <font color="#0000ff">#variable</font><br> <font color="#804040"><b>while</b></font> strdat[0] == '<font color="#ff00ff">1</font>':<br> <font color="#804040"><b>if</b></font> strdat[0:7] <font color="#804040"><b>in</b></font> vardef :<br> strdat = decodecode(strdat, vardef[strdat:7])<br> <font color="#804040"><b>elif</b></font> strdat[0:3] == '<font color="#ff00ff">100</font>':<br> strdat = de1(strdat, [codename, 2, 1])<br> <font color="#804040"><b>else</b></font>:<font color="#804040"><b>break</b></font><br> lentmp = bintoint(strdat[0:3],3)<br> totalbit = 10<br> <font color="#804040"><b>if</b></font> lentmp == 0: totalbit = 11<br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(lentmp, bintoint(strdat[3:totalbit-lentmp], <font color="#6a5acd">\</font><br> totalbit-3-lentmp))<br> usedlen += totalbit-lentmp<br> <font color="#804040"><b>elif</b></font> codetype == 3: <font color="#0000ff">#address</font><br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(bintoint(strdat[0:3],3), bintoint(strdat[3:14],11))<br> usedlen += 14<br> <font color="#804040"><b>elif</b></font> codetype == 4: <font color="#0000ff">#adder list</font><br> <font color="#804040"><b>while</b></font> 1:<br> outstr += "<font color="#ff00ff">%s,</font>"%exactaddr1(strdat[usedlen:])<br> usedlen += 14<br> <font color="#804040"><b>if</b></font> strdat[usedlen] == '<font color="#ff00ff">0</font>':<br> usedlen += 1<br> strdat = strdat[usedlen:]<br> <font color="#804040"><b>break</b></font><br> usedlen += 1<br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> <font color="#804040"><b>return</b></font> strdat<br> <font color="#804040"><b>elif</b></font> codetype == 5: <font color="#0000ff">#lists</font><br> strdat = exactlist(strdat)<br> <font color="#804040"><b>while</b></font> 1:<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">lists</font>', strdat<br> <font color="#804040"><b>if</b></font> strdat[:2]=='<font color="#ff00ff">00</font>':<br> <font color="#804040"><b>break</b></font><br> <font color="#804040"><b>if</b></font> strdat[:2]=='<font color="#ff00ff">01</font>':<br> usedlen += 2<br> strdat = exactlist(strdat[2:])<br> <font color="#804040"><b>elif</b></font> strdat[:2] == '<font color="#ff00ff">10</font>':<br> usedlen += 2<br> strdat = de1(strdat, ['<font color="#ff00ff">address</font>', 2, 3])<br> <font color="#804040"><b>break</b></font><br> <font color="#804040"><b>elif</b></font> strdat[:2] == '<font color="#ff00ff">11</font>':<br> <font color="#804040"><b>while</b></font> strdat[0] == '<font color="#ff00ff">1</font>':<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> '<font color="#ff00ff">lists</font>', strdat<br> <font color="#804040"><b>if</b></font> strdat[:7] <font color="#804040"><b>in</b></font> vardef:<br> strdat = decodecode(strdat, vardef[strdat[:7]])<br> <font color="#804040"><b>elif</b></font> strdat[:7] <font color="#804040"><b>in</b></font> codedef:<br> strdat = decodecode(strdat, codedef[strdat[:7]])<br> <font color="#804040"><b>elif</b></font> strdat[2:4] == '<font color="#ff00ff">00</font>':<br> strdat = de1(strdat, [codename, 3, 1])<br> <font color="#804040"><b>elif</b></font> strdat[2:4] == '<font color="#ff00ff">01</font>':<br> strdat = de1(strdat, [codename, 3, 2])<br> usedlen += 2<br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> <font color="#804040"><b>return</b></font> strdat[2:]<br> <font color="#804040"><b>elif</b></font> codetype == 6: <font color="#0000ff">#next</font><br> strdat = exactlist(strdat)<br> strdat = exactexp(strdat, codename)<br> strdat = de1(strdat, [codename, 0, 15])[1:]<br> strdat = de1(strdat, [codename, 0, 3])<br> <font color="#804040"><b>return</b></font> strdat<br> <font color="#804040"><b>elif</b></font> codetype == 7: <font color="#0000ff">#expersion</font><br> strdat = exactlist(strdat)<br> strdat = exactexp(strdat, codename)<br> <font color="#0000ff">#if strdat[:1] == '1':</font><br> <font color="#0000ff"># strdat = decodecode(strdat, vardef[strdat[:7]])</font><br> <font color="#0000ff">#strdat = exactlist(strdat, [codename, 7, 2]) </font><br> <font color="#804040"><b>return</b></font> strdat<br> <font color="#804040"><b>elif</b></font> codetype == 8: <font color="#0000ff">#debugin</font><br> <font color="#804040"><b>while</b></font> 1:<br> codetype = bintoint(strdat[:3], 3)<br> usedlen += 3<br> strtmp = "<font color="#ff00ff">t:%-6d</font>"%codetype<br> <font color="#804040"><b>if</b></font> codetype == 6:<br> codelen = bintoint(strdat[4:7], 3)<br> strdat = strdat[24+codelen:]<br> usedlen += 21+codelen<br> strdat = de1(strdat, [strtmp, 4, 2])<br> usedlen += 6<br> <font color="#804040"><b>if</b></font> strdat[:2] != '<font color="#ff00ff">01</font>':<font color="#804040"><b>break</b></font><br> strdat = strdat[2:]<br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> <font color="#804040"><b>return</b></font> strdat[2:]<br> <font color="#804040"><b>elif</b></font> codetype == 10: <font color="#0000ff">#opera expersion</font><br> <font color="#804040"><b>if</b></font> <font color="#804040"><b>not</b></font> strdat[:3] <font color="#804040"><b>in</b></font> optdef :<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!t</font>', strdat<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>return</b></font> de1(strdat, optdef[strdat[:3]])<br> <font color="#804040"><b>elif</b></font> codetype == 11: <font color="#0000ff">#param expersion</font><br> <font color="#804040"><b>if</b></font> <font color="#804040"><b>not</b></font> strdat[:3] <font color="#804040"><b>in</b></font> parmdef :<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!m</font>', strdat<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>return</b></font> de1(strdat, parmdef[strdat[:3]])<br> <font color="#804040"><b>elif</b></font> codetype == 13: <font color="#0000ff">#array process</font><br> <font color="#804040"><b>while</b></font> strdat[0] != '<font color="#ff00ff">0</font>':<br> strdat = de1(strdat[1:], vecdef[strdat[1:3]])<br> usedlen += 1<br> usedlen += 1<br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> <font color="#804040"><b>return</b></font> strdat[1:]<br> <font color="#804040"><b>elif</b></font> codetype == 14:<br> declen = bintoint(strdat, 2)<br> usedlen = 2<br> datval = 0<br> <font color="#804040"><b>if</b></font> strdat[2] == '<font color="#ff00ff">0</font>':<br> datval = 1<<declen<br> usedlen += 1<br> <font color="#804040"><b>else</b></font>:<br> declen+=1<br> <font color="#804040"><b>if</b></font> len(strdat[2:2+declen]) != declen:<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!1:%s[%2d]</font>'%(strdat[2:], len(strdat[2:]))<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>if</b></font> declen == 1: datval = 0<br> <font color="#804040"><b>else</b></font>: datval = bintoint(strdat[2:2+declen], declen)<br> usedlen += declen<br> outstr += outnum(datval)<br> <font color="#804040"><b>elif</b></font> codetype == 15:<br> <font color="#804040"><b>while</b></font> strdat[0] == '<font color="#ff00ff">1</font>':<br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">00</font>':<br> strdat = de1(strdat, [codename, 4, 14])<br> <font color="#804040"><b>while</b></font> strdat[0:5] != '<font color="#ff00ff">11111</font>':<br> strdat = decodeexp(strdat)<br> strdat = decodeexp(strdat)<br> <font color="#804040"><b>break</b></font><br><font color="#0000ff"># if strdat[0:5] == '11111':</font><br><font color="#0000ff"># strdat = decodecode(strdat, vardef[:7])</font><br><font color="#0000ff"># break</font><br><font color="#0000ff"># if strdat[2:4] != '11':</font><br><font color="#0000ff"># strdat = de1(strdat, [codename, 4, 14])</font><br><font color="#0000ff"># elif strdat[0:7] in vardef:</font><br><font color="#0000ff"># strdat = decodecode(strdat, vardef[:7])</font><br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">01</font>':<br> strdat = de1(strdat, [codename, 3, 1])<br> <font color="#804040"><b>continue</b></font><br> <font color="#804040"><b>if</b></font> strdat[1:3] == '<font color="#ff00ff">10</font>':<br> strdat = de1(strdat, [codename, 3, 1])<br> <font color="#804040"><b>continue</b></font><br><font color="#0000ff"># if strdat[1:5] == '1111':</font><br><font color="#0000ff"># lentmp = bintoint(strdat[5:7],2)</font><br><font color="#0000ff"># outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat[7:11], 4))</font><br><font color="#0000ff"># strdat = strdat[11:]</font><br><font color="#0000ff"># print outstr</font><br><font color="#0000ff"># continue</font><br><font color="#0000ff"># if strdat[1:4] == '110':</font><br><font color="#0000ff"># lentmp = bintoint(strdat[5:7],2)</font><br><font color="#0000ff"># outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat[7:10], 3))</font><br><font color="#0000ff"># strdat = strdat[10:]</font><br><font color="#0000ff"># print outstr</font><br><font color="#0000ff"># continue</font><br><br> strdat = strdat[3:]<br> lentmp = bintoint(strdat[1:3],2)<br> totalbit = 10<br> <font color="#804040"><b>if</b></font> lentmp == 0: totalbit = 11<br> <font color="#804040"><b>if</b></font> enabledbg: <font color="#804040"><b>print</b></font> strdat, totalbit, lentmp<br> outstr +='<font color="#ff00ff">(%d,%04x)</font>'%(lentmp, bintoint(strdat[3:totalbit-lentmp], <font color="#6a5acd">\</font><br> totalbit-3-lentmp))<br><br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> outstr = codename<br> outstr = fixout(outstr, 20)<br> strdat = strdat[totalbit-lentmp:]<br> <font color="#804040"><b>return</b></font> strdat<br> <font color="#804040"><b>elif</b></font> codetype == 16: <font color="#0000ff">#skip</font><br> <font color="#804040"><b>return</b></font> strdat<br><br> outstr = fixout(outstr, 40)<br> <font color="#804040"><b>print</b></font> outstr, '<font color="#6a5acd">\t</font>', usedlen+skipbit<br> <font color="#804040"><b>if</b></font> len(strdat) < usedlen:<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!e:[%s],usedlen:%d</font>'%(strdat, usedlen)<br> <font color="#804040"><b>return</b></font> strdat[usedlen:]<br><br><font color="#804040"><b>def</b></font> <font color="#008080">decodecode</font>(strdat, codedes):<br> <font color="#804040"><b>for</b></font> def1 <font color="#804040"><b>in</b></font> codedes[1]:<br> <font color="#804040"><b>print</b></font> strdat[:20]<br> strdat = de1(strdat, [codedes[0], def1[0], def1[1]])<br> <font color="#804040"><b>print</b></font> strdat[:20]<br> <font color="#804040"><b>return</b></font> strdat<br><br><font color="#804040"><b>def</b></font> <font color="#008080">decodeexp</font>(strdat):<br> <font color="#804040"><b>print</b></font> strdat[:20]<br> <font color="#804040"><b>if</b></font> strdat[:7] <font color="#804040"><b>in</b></font> codedef:<br> strdat = decodecode(strdat, codedef[strdat[:7]])<br> <font color="#804040"><b>elif</b></font> strdat[:7] <font color="#804040"><b>in</b></font> vardef:<br> strdat = decodecode(strdat, vardef[strdat[:7]])<br> <font color="#804040"><b>elif</b></font> strdat[:3] <font color="#804040"><b>in</b></font> optdef:<br> strdat = de1(strdat, optdef[strdat[:3]])<br> <font color="#804040"><b>elif</b></font> endcnts >= 1:<br> <font color="#804040"><b>if</b></font> len(strdat)>7:<br> <font color="#804040"><b>return</b></font> strdat[7:]<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>else</b></font> :<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!x:</font>', strdat<br> <font color="#804040"><b>return</b></font> ""<br> <font color="#804040"><b>return</b></font> strdat<br><br><font color="#804040"><b>def</b></font> <font color="#008080">decodedat</font>(strdat):<br> strdat = strdat.strip()<br> <font color="#804040"><b>while</b></font> strdat != None <font color="#804040"><b>and</b></font> 1<len(strdat):<br> strdat = decodeexp(strdat)<br> <font color="#804040"><b>if</b></font> strdat != None <font color="#804040"><b>and</b></font> 0 != len(strdat) <font color="#804040"><b>and</b></font> endcnts < 2:<br> <font color="#804040"><b>print</b></font> '<font color="#ff00ff">!!!d:[%s]</font>'%strdat<br><br>enabledbg = 0<br>endcnts = 0<br><br>strDat = ''<br>ibreak = 0<br>typtmp = 0<br>typeSta = {}<br>orgdat.reverse()<br><br><font color="#804040"><b>for</b></font> dat <font color="#804040"><b>in</b></font> orgdat:<br> <font color="#804040"><b>for</b></font> i <font color="#804040"><b>in</b></font> range(0,8):<br> <font color="#804040"><b>if</b></font> dat&0x80 :<br> typtmp |= 1<br> <font color="#804040"><b>if</b></font> printorgcode : sys.stdout.write('<font color="#ff00ff">1</font>')<br> strDat = strDat+'<font color="#ff00ff">1</font>'<br> <font color="#804040"><b>else</b></font>:<br> <font color="#804040"><b>if</b></font> printorgcode : sys.stdout.write('<font color="#ff00ff">0</font>')<br> strDat = strDat+'<font color="#ff00ff">0</font>'<br> dat=dat<<1<br> ibreak = ibreak+1<br> <font color="#804040"><b>if</b></font> ibreak%7==0 :<br> <font color="#804040"><b>if</b></font> typtmp <font color="#804040"><b>in</b></font> typeSta:<br> typeSta[typtmp] = typeSta[typtmp]+1<br> <font color="#804040"><b>else</b></font>:<br> typeSta[typtmp] = 1<br> <font color="#804040"><b>if</b></font> printorgcode : sys.stdout.write('<font color="#ff00ff"> </font>')<br> typtmp = 0<br> ibreak = 0<br> typtmp <<= 1<br><br>stacksize = bintoint(strDat[3:14], 11)*8+bintoint(strDat[:3], 3)</pre><pre><font color="#804040"><b>print</b></font> '<font color="#ff00ff">stacksize:</font>', stacksize<br><br><font color="#804040"><b>print</b></font> '<font color="#6a5acd">\n</font>'<br>decodedat(strDat[stacksize:])<br>exit(0)<br></pre></div></div>
<div style="clear: both;"></div>
</div>
</div>
<!-- /wrapper --><!-- /main-content -->
<div id="footer"><div class="wrapper">
<hr>
<p></p><div id="g_footer"> </div>
<div style="clear: both;"></div>
</div></div>
<!-- /wrapper --><!-- /footer -->
</div>
</div>
<!-- /wrapper --><!-- /container -->
<div id="extraDiv1"><span></span></div><div id="extraDiv2"><span></span></div>
<div id="extraDiv3"><span></span></div><div id="extraDiv4"><span></span></div>
<div id="extraDiv5"><span></span></div><div id="extraDiv6"><span></span></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -