def peek(self,address):
"""Read a word of memory from the monitor."""
return self.peekbyte(address)+(self.peekbyte(address+1)<<8);
def peek(self,address):
"""Read a word of memory from the monitor."""
return self.peekbyte(address)+(self.peekbyte(address+1)<<8);
+ def eeprompeek(self,address):
+ """Read a word of memory from the monitor."""
+ return self.peekbyte(address)+(self.peekbyte(address+1)<<8);
+
def pokebyte(self,address,value):
"""Set a byte of memory by the monitor."""
self.data=[address&0xff,address>>8,value];
self.writecmd(0,0x03,3,self.data);
return ord(self.data[0]);
def pokebyte(self,address,value):
"""Set a byte of memory by the monitor."""
self.data=[address&0xff,address>>8,value];
self.writecmd(0,0x03,3,self.data);
return ord(self.data[0]);
+ def setsecret(self,value):
+ """Set a secret word for later retreival. Used by glitcher."""
+ self.eeprompoke(0,value);
+ self.eeprompoke(1,value);
+ def getsecret(self):
+ """Get a secret word. Used by glitcher."""
+ self.eeprompeek(0);
+
def dumpmem(self,begin,end):
i=begin;
while i<end:
def dumpmem(self,begin,end):
i=begin;
while i<end:
- while(client.eeprompeek(0)!=self.secret):
+ while(client.getsecret()!=self.secret):
print "-- Setting secret";
client.start();
#Flash the secret to the first two bytes of CODE memory.
client.erase();
print "-- Setting secret";
client.start();
#Flash the secret to the first two bytes of CODE memory.
client.erase();
- client.eeprompoke(0,self.secret);
- client.eeprompoke(1,self.secret);
+ client.setsecret(self.secret);
sys.stdout.flush()
#Lock chip to unlock it later.
sys.stdout.flush()
#Lock chip to unlock it later.
client.glitchstart();
#Try to read *0, which is secret if read works.
client.glitchstart();
#Try to read *0, which is secret if read works.
- a=client.eeprompeek(0x0);
if lock>0: #locked
if(a!=0 and a!=0xFF and a!=self.secret):
gcount+=1;
if lock>0: #locked
if(a!=0 and a!=0xFF and a!=self.secret):
gcount+=1;