X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2Fgplay-arm.py;h=81fde03eef5e3bcf0ce9df52d59afe9fc065f4bb;hp=f8dd394cdae4288f407f1d7abba5cf4d847c600a;hb=042a155324ef5b76951e0194f61ab28c1c0521ce;hpb=d93b8f94f1b579f667ec449ad1738a62f80db4a0 diff --git a/client/gplay-arm.py b/client/gplay-arm.py index f8dd394..81fde03 100755 --- a/client/gplay-arm.py +++ b/client/gplay-arm.py @@ -1,6 +1,6 @@ #!/usr/bin/env ipython import sys, struct, binascii,time -from GoodFETARM import * +from GoodFETARM7 import * from intelhex import IntelHex @@ -109,6 +109,15 @@ def test(): 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." + def test1(): global data @@ -342,6 +351,38 @@ def printResults(): x=results[y] print "%.2x=%s"%(y,repr(["%x"%t for t in x])) +def ARMreadMem(self, adr, wrdcount): + retval = [] + r0 = self.ARMget_register(5); # store R0 and R1 + r1 = self.ARMget_register(9); + #print >>sys.stderr,("CPSR:\t%x"%self.ARMget_regCPSR()) + for word in range(adr, adr+(wrdcount*4), 4): + #sys.stdin.readline() + self.ARMset_register(5, word); # write address into R0 + self.ARMset_register(9, 0xdeadbeef) + self.ARM_nop(0) + self.ARM_nop(1) + self.ARMdebuginstr(0xe4959004L, 0); # push LDR R1, [R0], #4 into instruction pipeline (autoincrements for consecutive reads) + self.ARM_nop(0) + self.ARMrestart() + self.ARMwaitDBG() + time.sleep(.4) + self.ARMdebuginstr(0x47146,0) + self.ARMdebuginstr(0x47147,0) + print hex(self.ARMget_register(9)) + # FIXME: this may end up changing te current debug-state. should we compare to current_dbgstate? + #print repr(self.data[4]) + if (len(self.data)>4 and self.data[4] == '\x00'): + print >>sys.stderr,("FAILED TO READ MEMORY/RE-ENTER DEBUG MODE") + raise Exception("FAILED TO READ MEMORY/RE-ENTER DEBUG MODE") + #return -1 + else: + retval.append( self.ARMget_register(9) ) # read memory value from R1 register + #print >>sys.stderr,("CPSR: %x\t\tR0: %x\t\tR1: %x"%(self.ARMget_regCPSR(),self.ARMget_register(0),self.ARMget_register(1))) + self.ARMset_register(9, r1); # restore R0 and R1 + self.ARMset_register(5, r0); + return retval + """ case 0xD0: // loopback test cmddatalong[0] = 0x12345678;