mjkxxn 发表于 2010-3-28 08:35:51

BASIC Stamp 2 机器人控制板 程序电路图

我在网上搜到的程序好象是里面的程序那位高人编译哈,我花了10个大洋买的:
Program practice

Decode basic stamp 2 of parallax Inc

Decode basic stamp 2 EEPROM data(PBASIC opcode) .

import sys,string,array,glob#files = glob.glob('*.obj')#i = 0#for fn in files:# print i,':', fn# i = i+1#i = int(raw_input('select name:'))#if i<0 or i>=len(files): # print 'exceed index range, quit!'# exit(0)#fn = filesif 0: fn = '0.obj' src1 = file(fn, "rb") src1.seek(0x3ad) lenrs = ord(src1.read(1)) lenr = lenrs*0x12+4 src1.seek(0x3af) dats = src1.read(lenr) orgdat=array.array('B', dats) for i in range(16, lenrs*0x10-2, 16): del orgdat del orgdat del orgdatelse: fn = '0.bin' src1 = file(fn, "rb") dats = src1.read() orgdat=array.array('B', dats)i = 0printorgcode = 0if printorgcode : for d in orgdat: print "%02X"%d, i = i+1 if i%16 == 0: print; i=0def bintoint(strdat, strlen): i = j= 0# print '[%d %d]'%(len(strdat), strlen) if strlen == 1: return 0 for i in range(strlen): j<<=1 if strdat == '1': j |= 1 return jdef exactaddr1(strdat): return '(%d,%03x)'%(bintoint(strdat,3), bintoint(strdat,11))def exactlist(strdat, strtip = ""): dattp = bintoint(strdat, 2) if strtip == "" : strtip = 'param' if strdat == '1101': outstr = strtip outstr = fixout(outstr, 20) strdat = strdat usedlen = 0 lentmp = bintoint(strdat, 2) totalbit = 9 if lentmp == 0: totalbit = 10 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat, totalbit-2-lentmp)) usedlen += totalbit-lentmp if enabledbg: print outstr if enabledbg: print 'list:%s'%strdat, lentmp, strdat return strdat if strdat == '0111': outstr = strtip outstr = fixout(outstr, 20) strdat = strdat usedlen = 0 lentmp = bintoint(strdat, 2) totalbit = 9 if lentmp == 0: totalbit = 10 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat, totalbit-2-lentmp)) usedlen += totalbit-lentmp if enabledbg: print outstr if enabledbg: print 'list:%s'%strdat, lentmp, strdat return strdat if '1111' == strdat: return strdat if dattp == 2: return de1(strdat, ]) if dattp == 3: return de1(strdat, ]) if dattp == 1: return de1(strdat, ]) if enabledbg: print 'here', strdat codeinf = optdef]; codeinf = strtip return de1(strdat, codeinf);def funname(codestr): if codestr in codedef: return codedef return codestrcodedef = { #'0101111':['name', [,[...]]] '0000000':['END', [,]], '0000001':['SLEEP', [,]], '0000010':['NAP', [,]], '0000011':['STOP', [,]], '0000100':['OUTPUT', [,]], '0000101':['HIGH', [,]], '0000110':['TOGGLE', [,]], '0000111':['LOW', [,]], '0001000':['REVERSE', [,]], '0001001':['GOTO', [,]], '0001010':['GOSUB', [,]], '0001011':['RETURN', [,]], '0001100':['INPUT', [,]], '0001101':['IF', [,]], '0001110':['SWITCH', [,]], '0001111':['BRANCH', [,]], '0010000':['CHOICE', [,,]], '0010001':['LOOKDOWN', [,,]], '0010010':['RANDOM', [,,]], '0010011':['READ', [,,]], '0010100':['WRITE', [,]], '0010101':['PAUSE', [,]], '0010110':['FREQOUT', [,]], '0010111':['FREQOUT', [,]], '0011000':['DTMFOUT', [,]], '0011001':['XOUT', [,]], '0011010':['=', [,]], '0011111':['=', [,]], '0011110':['=', [,]], '0100000':['DEBUG', [,]], '0100001':['SEROUT', [,]], '0100010':['SERIN', [,]], '0100011':['SERIN', [,]], '0100100':['PULSOUT', [,]], '0100101':['PULSIN', [,,]], '0100110':['COUNT', [,]], '0100111':['SHIFTIN', [,]], '0101000':['SHIFTOUT', [,]], '0101001':['RCTIME', [,]], '0101010':['BUTTON', [,]], '0101011':['PWM', [,]], '0110000':['NEXT', [,]], '0111000':['NEXT', [,]], '0111001':['WHILE', [,,]], '0111010':['UNTIL', [,]], '0111011':['NEXT', [,]], '1000000':['SQR', [,]], '1000001':['ABS', [,]], '1000010':['NOT', [,]], '1000010':['~', [,]], '1000011':['-', [,]], '1000100':['DCD', [,]], '1000101':['NCD', [,]], '1000110':['COS', [,]], '1000111':['SIN', [,]], '1001000':['HYP', [,]], '1001001':['ATN', [,]], '1001010':['& ', [,]], '1001011':['|', [,]], '1001100':['^', [,]], '1001101':['MIN', [,]], '1001110':['MAX', [,]], '1001111':['+', [,]], '1010000':['-', [,]], '1010001':['*/', [,]], '1010010':['*', [,]], '1010011':['**', [,]], '1010100':['//', [,]], '1010101':['/', [,]], '1010110':['DIG', [,]], '1010111':['<<', [,]], '1011000':['>>', [,]], '1011001':['REV', [,]], '1011010':['>=', [,]], '1011011':['<=', [,]], '1011100':['==', [,]], '1011101':['<>', [,]], '1011110':['>', [,]], '1011111':['<', [,]],}vardef = { '1110000':['bit', [,]], '1110001':['nib', [,]], '1110010':['byte', [,]], '1110011':['word', [,]], '1110100':['bit_array', [,]], '1110101':['nib_array', [,]], '1110110':['byte_array',[,]], '1110111':['word_array',[,]], '1111010':['byte', [,]], '0111010':['byte', [,]], '1111110':['byte', [,]], '1111011':['word', [,]], '0111011':['word', [,]], '1111111':['word', [,]], '1111101':['bit_array', [,]],}vecdef = { '00':['elem', 1, 1], '11':['', 2, 14], }optdef = { '111':['variable', 4, 2], '110':['const', 3, 1], '101':['opera', 7, 0], '100':['opera', 7, 0], }parmdef = { '110':['variable', 3, 2], }inddef = {'general':0, 'const':1, 'var':2, 'address':3, 'addresslist':4, 'lists':5, 'expersion':7, 'debugin':8, 'opera':10, 'param expersion':11, 'skip':12 }def exactexp(strdat, codename): if enabledbg: print 'in exactexp' while strdat == '1': if enabledbg: print 'exactexp', strdat[:30] if strdat[:7] in codedef: strdat = decodecode(strdat, codedef]) continue if strdat[:7] in vardef: strdat = decodecode(strdat, vardef]) continue if strdat == '00': strdat = de1(strdat, ) while strdat != '11111': strdat = decodeexp(strdat) strdat = decodeexp(strdat) break continue if strdat == '01': strdat = de1(strdat, ) continue if strdat == '10': strdat = de1(strdat, ) continue if enabledbg: print 'out exactexp' strdat = strdat lentmp = bintoint(strdat,2) totalbit = 10 if lentmp == 0: totalbit = 11 if enabledbg: print strdat, totalbit, lentmp outstr +='(%d,%04x)'%(lentmp, bintoint(strdat, \ totalbit-3-lentmp)) outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit outstr = codename outstr = fixout(outstr, 20) strdat = strdat if enabledbg: print 'out exactexp' return strdatdef fixout(outstr, splen): outstr += ' '*(splen-len(outstr)) return outstrdef outnum(datval): outstr = "%-6d"%datval if datval > 0x20 and datval < 0x7f: outstr += ' ==> %c'%datval return fixout(outstr, 10)def de1(strdat, codeinf): if enabledbg: print 'decode:', len(strdat),strdat[:50] global endcnts codename, skipbit, codetype = codeinf if codetype == 0: outstr = strdat[:skipbit] else: outstr = codename outstr = fixout(outstr, 20) usedlen = 0 if codetype == 0: #general code if strdat[:7] == '0000000': endcnts += 1 else: endcnts = 0 outstr += funname(strdat[:skipbit]) elif codetype == 9: #var type outstr += '%04x'%bintoint(strdat, skipbit) usedlen += 7 elif codetype == 12: #strip zero if bintoint(strdat, skipbit) != 0 or len(strdat) < skipbit: print '!!!z', strdat[:50] return strdat strdat = strdat if codetype == 1: #constant declen = bintoint(strdat, 4) usedlen = 4 datval = 0 if strdat == '0': datval = 1<<declen usedlen += 1 else: declen+=1 if len(strdat) != declen: print '!!!1:%s[%2d]'%(strdat, len(strdat)) return "" if declen == 1: datval = 0 else: datval = bintoint(strdat, declen) usedlen += declen outstr += outnum(datval) elif codetype == 2: #variable while strdat == '1': if strdat in vardef : strdat = decodecode(strdat, vardef) elif strdat == '100': strdat = de1(strdat, ) else:break lentmp = bintoint(strdat,3) totalbit = 10 if lentmp == 0: totalbit = 11 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat, \ totalbit-3-lentmp)) usedlen += totalbit-lentmp elif codetype == 3: #address outstr +='(%d,%04x)'%(bintoint(strdat,3), bintoint(strdat,11)) usedlen += 14 elif codetype == 4: #adder list while 1: outstr += "%s,"%exactaddr1(strdat) usedlen += 14 if strdat == '0': usedlen += 1 strdat = strdat break usedlen += 1 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat elif codetype == 5: #lists strdat = exactlist(strdat) while 1: if enabledbg: print 'lists', strdat if strdat[:2]=='00': break if strdat[:2]=='01': usedlen += 2 strdat = exactlist(strdat) elif strdat[:2] == '10': usedlen += 2 strdat = de1(strdat, ['address', 2, 3]) break elif strdat[:2] == '11': while strdat == '1': if enabledbg: print 'lists', strdat if strdat[:7] in vardef: strdat = decodecode(strdat, vardef]) elif strdat[:7] in codedef: strdat = decodecode(strdat, codedef]) elif strdat == '00': strdat = de1(strdat, ) elif strdat == '01': strdat = de1(strdat, ) usedlen += 2 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat elif codetype == 6: #next strdat = exactlist(strdat) strdat = exactexp(strdat, codename) strdat = de1(strdat, ) strdat = de1(strdat, ) return strdat elif codetype == 7: #expersion strdat = exactlist(strdat) strdat = exactexp(strdat, codename) #if strdat[:1] == '1': # strdat = decodecode(strdat, vardef]) #strdat = exactlist(strdat, )return strdat elif codetype == 8: #debugin while 1: codetype = bintoint(strdat[:3], 3) usedlen += 3 strtmp = "t:%-6d"%codetype if codetype == 6: codelen = bintoint(strdat, 3) strdat = strdat usedlen += 21+codelen strdat = de1(strdat, ) usedlen += 6 if strdat[:2] != '01':break strdat = strdat outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat elif codetype == 10: #opera expersion if not strdat[:3] in optdef : print '!!!t', strdat return "" return de1(strdat, optdef]) elif codetype == 11: #param expersion if not strdat[:3] in parmdef : print '!!!m', strdat return "" return de1(strdat, parmdef]) elif codetype == 13: #array process while strdat != '0': strdat = de1(strdat, vecdef]) usedlen += 1 usedlen += 1 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat elif codetype == 14: declen = bintoint(strdat, 2) usedlen = 2 datval = 0 if strdat == '0': datval = 1<<declen usedlen += 1 else: declen+=1 if len(strdat) != declen: print '!!!1:%s[%2d]'%(strdat, len(strdat)) return "" if declen == 1: datval = 0 else: datval = bintoint(strdat, declen) usedlen += declen outstr += outnum(datval) elif codetype == 15: while strdat == '1': if strdat == '00': strdat = de1(strdat, ) while strdat != '11111': strdat = decodeexp(strdat) strdat = decodeexp(strdat) break# if strdat == '11111':# strdat = decodecode(strdat, vardef[:7])# break# if strdat != '11':# strdat = de1(strdat, )# elif strdat in vardef:# strdat = decodecode(strdat, vardef[:7]) continue if strdat == '01': strdat = de1(strdat, ) continue if strdat == '10': strdat = de1(strdat, ) continue# if strdat == '1111':# lentmp = bintoint(strdat,2)# outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat, 4))# strdat = strdat# print outstr# continue# if strdat == '110':# lentmp = bintoint(strdat,2)# outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat, 3))# strdat = strdat# print outstr# continue strdat = strdat lentmp = bintoint(strdat,2) totalbit = 10 if lentmp == 0: totalbit = 11 if enabledbg: print strdat, totalbit, lentmp outstr +='(%d,%04x)'%(lentmp, bintoint(strdat, \ totalbit-3-lentmp)) outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit outstr = codename outstr = fixout(outstr, 20) strdat = strdat return strdat elif codetype == 16: #skip return strdat outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit if len(strdat) < usedlen: print '!!!e:[%s],usedlen:%d'%(strdat, usedlen) return strdatdef decodecode(strdat, codedes): for def1 in codedes: print strdat[:20] strdat = de1(strdat, , def1, def1]) print strdat[:20] return strdatdef decodeexp(strdat): print strdat[:20] if strdat[:7] in codedef: strdat = decodecode(strdat, codedef]) elif strdat[:7] in vardef: strdat = decodecode(strdat, vardef]) elif strdat[:3] in optdef: strdat = de1(strdat, optdef]) elif endcnts >= 1: if len(strdat)>7: return strdat return "" else : print '!!!x:', strdat return "" return strdatdef decodedat(strdat): strdat = strdat.strip() while strdat != None and 1<len(strdat): strdat = decodeexp(strdat) if strdat != None and 0 != len(strdat) and endcnts < 2: print '!!!d:[%s]'%strdatenabledbg = 0endcnts = 0strDat = ''ibreak = 0typtmp = 0typeSta = {}orgdat.reverse()for dat in orgdat: for i in range(0,8): if dat&0x80 : typtmp |= 1 if printorgcode : sys.stdout.write('1') strDat = strDat+'1' else: if printorgcode : sys.stdout.write('0') strDat = strDat+'0' dat=dat<<1 ibreak = ibreak+1 if ibreak%7==0 : if typtmp in typeSta: typeSta = typeSta+1 else: typeSta = 1 if printorgcode : sys.stdout.write(' ') typtmp = 0 ibreak = 0 typtmp <<= 1stacksize = bintoint(strDat, 11)*8+bintoint(strDat[:3], 3)print 'stacksize:', stacksizeprint '\n'decodedat(strDat)exit(0)
点击此处下载 ourdev_541750.zip(文件大小:7K) (原文件名:75448169programpratice.py.zip)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_541751.jpg
(原文件名:KK.jpg)

http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_541752.jpg
(原文件名:MM.jpg)
点击此处下载 ourdev_541749.pdf(文件大小:5.20M) (原文件名:BASIC Stamp Manual v2.2.pdf)

mjkxxn 发表于 2010-3-28 08:49:35

上传编译器:点击此处下载 ourdev_541753.rar(文件大小:16.99M) (原文件名:Setup-Stamp-Editor-v2.5.rar)

有人编译成功记得上传哦

okeykat 发表于 2010-11-11 09:13:26

楼主,这文件怎么用???

XQGG 发表于 2010-11-11 09:21:45

记号

sheng120410 发表于 2012-9-16 13:14:53

楼主,这东西怎么玩?能提供核心代码?谢谢!
页: [1]
查看完整版本: BASIC Stamp 2 机器人控制板 程序电路图