Flushing on DEBUG messages.
[goodfet] / client / goodfet.msp430
index d012728..be13da6 100755 (executable)
@@ -15,6 +15,9 @@ if(len(sys.argv)==1):
     print "%s erase" % sys.argv[0];
     print "%s flash $foo.hex [0x$start 0x$stop]" % sys.argv[0];
     print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
+    print "%s poke 0x$adr 0x$val" % sys.argv[0];
+    print "%s peek 0x$start [0x$stop]" % sys.argv[0];
+    print "%s run" % sys.argv[0];
     sys.exit();
 
 #Initialize FET and set baud rate
@@ -77,17 +80,37 @@ if(sys.argv[1]=="flash"):
     
     h = IntelHex16bit(f);
     
+    #Should this be default?
+    #Makes flashing multiple images inconvenient.
     client.MSP430masserase();
+    
+    count=0; #Bytes in commit.
+    first=0;
+    vals=[];
+    last=0;  #Last address committed.
     for i in h._buf.keys():
-        #print "%04x: %04x"%(i,h[i>>1]);
+        if((count>0x40 or last+2!=i) and count>0 and i&1==0):
+            #print "%i, %x, %x" % (len(vals), last, i);
+            client.MSP430pokeflashblock(first,vals);
+            count=0;
+            first=0;
+            last=0;
+            vals=[];
         if(i>=start and i<stop  and i&1==0):
             val=h[i>>1];
-            val2=client.MSP430pokeflash(i,val);
-            if(val!=val2):
-                print "Write error at %04x, %04x!=%04x." %(
-                    i, val, val2);
+            if(count==0):
+                first=i;
+            last=i;
+            count+=2;
+            #val2=client.MSP430pokeflash(i,val);
+            #if(val!=val2):
+            #    print "Write error at %04x, %04x!=%04x." %(
+            #        i, val, val2);
+            vals+=[val&0xff,(val&0xff00)>>8];
             if(i%0x100==0):
                 print "%04x" % i;
+    if count>0: #last commit, ivt
+        client.MSP430pokeflashblock(first,vals);
 if(sys.argv[1]=="verify"):
     f=sys.argv[2];
     start=0;
@@ -131,10 +154,15 @@ if(sys.argv[1]=="poke"):
         print "Poked to %04x" % client.MSP430peek(start);
 
 
+if(sys.argv[1]=="run"):
+    #Set PC to RESET vector's value.
+    #client.MSP430setPC(client.MSP430peek(0xfffe));
+    #client.MSP430releasecpu();
+    client.MSP430run();
 
 if(sys.argv[1]=="whatever"):
     for i in [0x24FF, 0x2500, 0x2502, 0x2504]:
         print "%04x" % client.MSP430peek(i);
 
-client.MSP430releasecpu();
-client.MSP430stop();
+#client.MSP430releasecpu();
+#client.MSP430stop();