+def print_registers():
+ return [ hex(client.ARMget_register(x)) for x in range(15) ]
+
+def regwratchet(num,hi=13,lo=0):
+ for x in xrange(lo,hi+1):
+ client.ARMset_register(x,num)
+
+def test():
+ print "ARM JTAG Test Unit"
+ print " Chip ID", hex(client.ARMident())
+ print client.ARMidentstr()
+ print " Debug State: ",hex(client.ARMget_dbgstate())
+ print " Debug CTRL: ",hex(client.ARMget_dbgctrl())
+ print
+ print "Testing Register Read/Writes"
+ print " Storing old values"
+ originalregs = [client.ARMget_register(x) for x in xrange(16)]
+
+ print "Simple test"
+ test = [None for x in xrange(15)]
+ control = [x for x in xrange(15)]
+ for x in xrange(15):
+ client.ARMset_register(x,control[x])
+ test[x] = client.ARMget_register(x)
+ if control != test:
+ print "FAIL"
+ print "Control:",control
+ print "Test: ",test
+
+ print "A little harder..."
+ test = [None for x in xrange(15)]
+ control = [4*x for x in xrange(15)]
+ for x in xrange(15):
+ client.ARMset_register(x,control[x])
+ test[x] = client.ARMget_register(x)
+ if control != test:
+ print "FAIL"
+ print "Control:",control
+ print "Test: ",test
+
+ print "Complex testing 1"
+ for y in xrange(0,0xffffffff,0x10101010):
+ test = [None for x in xrange(15)]
+ control = [y for x in xrange(15)]
+ print " Test parms: ",control
+ for x in xrange(15):
+ client.ARMset_register(x,control[x])
+ test[x] = client.ARMget_register(x)
+ if control != test:
+ print "FAIL"
+ print "Control:",control
+ print "Test: ",test
+
+ print "Complex testing 2"
+ for y in xrange(0,0xffffffff,101010101):
+ test = [None for x in xrange(15)]
+ control = [y for x in xrange(15)]
+ print " Test parms: ",control
+ for x in xrange(15):
+ client.ARMset_register(x,control[x])
+ test[x] = client.ARMget_register(x)
+ if control != test:
+ print "FAIL"
+ print "Control:",control
+ print "Test: ",test
+
+ test = [None for x in xrange(15)]
+ control = [0x100*x for x in xrange(15)]
+ for x in xrange(15):
+ client.ARMset_register(x,control[x])
+ test[x] = client.ARMget_register(x)
+ if control != test:
+ print "FAIL"
+ print "Control:",control
+ print "Test: ",test
+
+ print "Resetting original register values..."
+ for x in xrange(16):
+ client.ARMset_register(x,originalregs[x])
+ regs = [client.ARMget_register(x) for x in xrange(16)]
+ print "Original: \t",originalregs
+ print "Now (r15 may differ:\t",regs
+
+ print "Testing setting and movement of PC between instructions"
+ #client.ARMsetPC(0x0)
+ print "PC:",client.ARMgetPC()
+ print "PC:",client.ARMgetPC()
+ print "PC:",client.ARMgetPC()
+ print "PC:",client.ARMgetPC()
+ print "Testing readChunk/writeChunk"
+ mem=client.ARMreadChunk(0x200000,32)
+ client.ARMwriteChunk(0x200000,mem)
+ mem2=client.ARMreadChunk(0x200000,32)
+ if (mem != mem2):
+ print "Failed: \n%s\n%s"%(repr([hex(x) for x in mem]), repr([hex(x) for x in mem2]))
+ else:
+ print "Passed."
+
+