f5eb1caa48d446f4198b490ca9fe04fbbf4d9498
[goodfet] / client / goodfet.monitor
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFET import GoodFET;
7 from intelhex import IntelHex16bit;
8
9 if(len(sys.argv)==1):
10     print "Usage: %s verb [objects]\n" % sys.argv[0];
11     print "%s test" % sys.argv[0];
12     print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
13     print "%s ivt" % sys.argv[0];
14     print "%s peek [0x$start 0x$stop]" % sys.argv[0];
15     print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
16     print "%s ramfill" % sys.argv[0];
17     print "%s ramdepth" % sys.argv[0];
18     print "%s info" % sys.argv[0];
19     print "%s info" % sys.argv[0];
20     print "%s call 0x$start" % sys.argv[0];
21     print "%s exec '0x35 0x00 0x..'" % sys.argv[0];
22     sys.exit();
23
24 #Initailize FET and set baud rate
25 client=GoodFET();
26 client.serInit()
27
28 if(sys.argv[1]=="on"):
29     client.dir(0xFF);
30     client.out(0xFF);
31 if(sys.argv[1]=="off"):
32     client.out(0x00);
33
34 if(sys.argv[1]=="call"):
35     adr=int(sys.argv[2],16);
36     print "Calling %04x" % adr;
37     client.call(adr);
38     client.monitortest();
39 if(sys.argv[1]=="info"):
40     a=client.peekbyte(0xff0);
41     b=client.peekbyte(0xff1);
42     print "GoodFET with %02x%02x MCU" % (a,b);
43 if(sys.argv[1]=="ramfill"):
44     client.monitor_ram_pattern();
45 if(sys.argv[1]=="ramdepth"):
46     print "0x%04x RAM bytes free." % client.monitor_ram_depth();
47 if(sys.argv[1]=="test"):
48     client.monitortest();
49 if(sys.argv[1]=="findbaud"):
50     client.findbaud();
51 if(sys.argv[1]=="dump"):
52     f = sys.argv[2];
53     start=0x0200;
54     stop=0xFFFF;
55     if(len(sys.argv)>3):
56         start=int(sys.argv[3],16);
57     if(len(sys.argv)>4):
58         stop=int(sys.argv[4],16);
59     
60     print "Dumping from %04x to %04x as %s." % (start,stop,f);
61     h = IntelHex16bit(None);
62     i=start;
63     while i<stop:
64         h[i>>1]=client.peekword(i);
65         if(i%0x100==0):
66             print "Dumped %04x."%i;
67         i+=2;
68     h.write_hex_file(f);
69 if(sys.argv[1]=="erase"):
70     client.masserase();
71 if(sys.argv[1]=="ivt"):
72     client.dumpmem(0xFFE0,0xFFFF);
73
74 if(sys.argv[1]=="peek"):
75     start=0xFFE0;
76     stop=0xFFFF;
77     if(len(sys.argv)>2):
78         start=int(sys.argv[2],16);
79         stop=start+1
80     if(len(sys.argv)>3):
81         stop=int(sys.argv[3],16);
82     
83     client.dumpmem(start,stop);
84 if(sys.argv[1]=="verify"):
85     f=sys.argv[2];
86     start=0;
87     stop=0xFFFF;
88     if(len(sys.argv)>3):
89         start=int(sys.argv[3],16);
90     if(len(sys.argv)>4):
91         stop=int(sys.argv[4],16);
92     
93     h = IntelHex16bit(f);
94     for i in h._buf.keys():
95         if(i>=start and i<stop and i&1==0):
96             peek=client.peek(i)
97             if(h[i>>1]!=peek):
98                 print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]);
99             if(i%0x100==0):
100                 print "%04x" % i;
101
102 if(sys.argv[1]=="whatever"):
103     for i in [0x24FF, 0x2500, 0x2502, 0x2504]:
104         print "%04x" % client.peekword(i);
105