#
import sys, binascii, struct
+import atlasutils.smartprint as asp
#Global Commands
READ = 0x00
def ARMget_register(self, reg):
"""Get an ARM's Register"""
self.writecmd(0x33,GET_REGISTER,1,[reg&0xff])
- print "DEBUG:GET_REGISTER: %s"%repr(self.data)
+ print "DEBUG:GET_REGISTER: %s"%asp.hexText(self.data)
retval = struct.unpack("<L", "".join(self.data[0:4]))[0]
return retval
def ARMset_register(self, reg, val):
"""Get an ARM's Register"""
- self.writecmd(0x33,GET_REGISTER,8,[reg,0,0,0,val>>24, (val>>16)&0xff, (val>>8)&0xff, val&0xff])
- print "DEBUG:SET_REGISTER: %s"%repr(self.data)
+ self.writecmd(0x33,GET_REGISTER,20,[reg,0,0,0,val>>24, (val>>16)&0xff, (val>>8)&0xff, val&0xff,9,8,7,6,5,4,3,2,1,0,2,3])
+ print "DEBUG:SET_REGISTER: %s"%asp.hexText(self.data)
retval = struct.unpack("<L", "".join(self.data[0:4]))[0]
return retval
def ARMget_registers(self):
"""Get an ARM's Register"""
- self.writecmd(0x33,GET_REGISTERS,0,[])
- print "DEBUG:GET_REGISTER: %s"%repr(self.data)
+ clear = [x for x in range(20)]
+ self.writecmd(0x33,GET_REGISTERS,20,clear)
+ print "DEBUG:GET_REGISTER: %s"%asp.hexText(self.data)
+ retval = []
+ for x in range(0,len(self.data), 4):
+ retval.append(struct.unpack("<L", self.data[x:x+4])[0])
#retval = struct.unpack("<L", "".join(self.data[0:4]))[0]
return retval
def ARMset_registers(self, regs):
"""Get an ARM's Register"""
regarry = []
for reg in regs:
- regarray.merge([reg>>24, (reg>>16)&0xff, (reg>>8)&0xff, reg&0xff])
- self.writecmd(0x33,GET_REGISTER,16*4,regarray)
- print "DEBUG:SET_REGISTER: %s"%repr(self.data)
- retval = struct.unpack("<L", "".join(self.data[0:4]))[0]
- return retval
+ regarry.extend([reg>>24, (reg>>16)&0xff, (reg>>8)&0xff, reg&0xff])
+ self.writecmd(0x33,GET_REGISTER,16*4,regarry)
+ print "DEBUG:SET_REGISTER: %s"%asp.hexText(self.data)
+ #retval = struct.unpack("<L", "".join(self.data[0:4]))[0]
+ #return retval
def ARMcmd(self,phrase):
self.writecmd(0x33,READ,len(phrase),phrase)
val=ord(self.data[0])
jtagsetup();
//Known-good starting position.
//Might be unnecessary.
- SETTST;
- SETRST;
+ //SETTST;
+ //SETRST;
- delay(0x2);
+ //delay(0x2);
- CLRRST;
- delay(2);
- CLRTST;
+ //CLRRST;
+ //delay(2);
+ //CLRTST;
- msdelay(10);
- SETRST;
+ //msdelay(10);
+ //SETRST;
/*
P5DIR &=~RST;
*/
- delay(0x2);
+ //delay(0x2);
jtagarm7tdmi_resettap();
return jtagarm7tdmi_idcode();
}
/******************** Complex Commands **************************/
-//! Push an instruction into the CPU pipeline
-// NOTE! Must provide EXECNOPARM for parameter if no parm is required.
-unsigned long test_exec(unsigned long instr, unsigned long parameter, unsigned char systemspeed) {
- unsigned long retval;
-
- cmddatalong[1] = jtagarm7tdmi_nop( 0);
- cmddatalong[2] = jtagarm7tdmi_nop(systemspeed);
- cmddatalong[3] = jtagarm7tdmi_instr_primitive(instr, 0); // write 32-bit instruction code into DR
- cmddatalong[4] = jtagarm7tdmi_nop( 0);
- cmddatalong[5] = jtagarm7tdmi_nop( 0);
- cmddatalong[6] = jtagarm7tdmi_instr_primitive(parameter, 0); // inject long
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
- cmddatalong[9] = jtagarm7tdmi_nop( 0);
- retval = cmddatalong[9];
-
- return(retval);
-}
-
//! Push an instruction into the CPU pipeline
// NOTE! Must provide EXECNOPARM for parameter if no parm is required.
unsigned long jtagarm7tdmi_exec(unsigned long instr, unsigned long parameter, unsigned char systemspeed) {
unsigned long retval;
- cmddatalong[1] = jtagarm7tdmi_nop( 0);
- cmddatalong[2] = jtagarm7tdmi_nop(systemspeed);
- cmddatalong[3] = jtagarm7tdmi_instr_primitive(instr, 0); // write 32-bit instruction code into DR
- cmddatalong[4] = jtagarm7tdmi_nop( 0);
- cmddatalong[5] = jtagarm7tdmi_nop( 0);
- cmddatalong[6] = jtagarm7tdmi_instr_primitive(parameter, 0); // inject long
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop(systemspeed));
+ debughex32(jtagarm7tdmi_instr_primitive(instr, 0)); // write 32-bit instruction code into DR
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_instr_primitive(parameter, 0)); // inject long
+ debughex32(jtagarm7tdmi_nop( 0));
retval = jtagarm7tdmi_nop( 0);
- cmddatalong[9] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = retval;
+ debughex32(retval);
+ debughex32(jtagarm7tdmi_nop( 0));
return(retval);
}
unsigned long jtagarm7tdmi_get_register(unsigned char reg) {
unsigned long retval = 0, instr;
// push nop into pipeline - clean out the pipeline...
- cmddatalong[2] = jtagarm7tdmi_nop( 0);
-
instr = ARM_READ_REG | (reg<<12); // push STR Rx, [R14] into pipeline
- cmddatalong[1] = jtagarm7tdmi_instr_primitive(instr, 0);
- cmddatalong[2] = jtagarm7tdmi_nop( 0); // push nop into pipeline - fetched
- cmddatalong[3] = jtagarm7tdmi_nop( 0); // push nop into pipeline - decoded
- cmddatalong[4] = jtagarm7tdmi_nop( 0); // push nop into pipeline - executed
- retval = jtagarm7tdmi_nop( 0); // recover 32-bit word
- cmddatalong[5] = retval;
- cmddatalong[6] = jtagarm7tdmi_nop( 0);
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
- return retval;
-}
-
-//! Retrieve a 32-bit Register value
-unsigned long test_get_register(unsigned char reg) {
- unsigned long retval = 0, instr;
- // push nop into pipeline - clean out the pipeline...
- cmddatalong[2] = jtagarm7tdmi_nop( 0);
- instr = ARM_READ_REG | (reg<<12); // push STR Rx, [R14] into pipeline
- cmddatalong[1] = jtagarm7tdmi_instr_primitive(instr, 0); // fetch
- cmddatalong[2] = jtagarm7tdmi_nop( 0); // decode
- cmddatalong[3] = jtagarm7tdmi_nop( 0); // execute
- cmddatalong[4] = jtagarm7tdmi_nop( 0); // ??? what happens here ???
- retval = jtagarm7tdmi_nop( 0); // recover 32-bit word
- cmddatalong[5] = retval;
- cmddatalong[6] = jtagarm7tdmi_nop( 0);
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_instr_primitive(instr, 0));
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - fetched
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - decoded
+ jtagarm7tdmi_nop( 0); // push nop into pipeline - executed
+ retval = jtagarm7tdmi_nop( 0); // recover 32-bit word
+ debughex32(retval);
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
return retval;
}
//! Set a 32-bit Register value
unsigned long jtagarm7tdmi_set_register(unsigned char reg, unsigned long val) {
unsigned long retval = 0, instr;
- cmddatalong[1] = jtagarm7tdmi_nop( 0); // push nop into pipeline - clean out the pipeline...
+ instr = ARM_WRITE_REG | (reg<<12); // push LDR Rx, [R14] into pipeline
- instr = ARM_WRITE_REG | (reg<<12); // push LDR Rx, [R14] into pipeline
- cmddatalong[2] = jtagarm7tdmi_instr_primitive(instr, 0); // push nop into pipeline - fetch
- cmddatalong[3] = jtagarm7tdmi_nop( 0); // push nop into pipeline - decode
- cmddatalong[4] = jtagarm7tdmi_instr_primitive(val-16, 0); // push 32-bit word on data bus
- //cmddatalong[4] = jtagarm7tdmi_nop( 0); // push nop into pipeline - execute
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - clean out the pipeline...
+ debughex32(jtagarm7tdmi_instr_primitive(instr, 0)); // push nop into pipeline - fetch
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - decode
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - execute
- cmddatalong[5] = jtagarm7tdmi_instr_primitive(val, 0); // push 32-bit word on data bus
- cmddatalong[6] = jtagarm7tdmi_instr_primitive(val+16, 0); // push 32-bit word on data bus
- //cmddatalong[6] = jtagarm7tdmi_nop( 0); // push nop into pipeline - executed
+ debughex32(jtagarm7tdmi_instr_primitive(val, 0)); // push 32-bit word on data bus
+ debughex32(jtagarm7tdmi_nop( 0)); // push nop into pipeline - executed
- if (reg == ARM_REG_PC){
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
- }
- cmddatalong[9] = jtagarm7tdmi_nop( 0);
+ //if (reg == ARM_REG_PC){
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ //}
+ debughex32(jtagarm7tdmi_nop( 0));
retval = cmddatalong[5];
return(retval);
}
-//! Set a 32-bit Register value
-unsigned long test_set_register(unsigned char reg, unsigned long val) {
- unsigned long retval = 0, instr;
- cmddatalong[1] = jtagarm7tdmi_nop( 0); // push nop into pipeline - clean out the pipeline...
-
- instr = ARM_WRITE_REG | (reg<<12); // push LDR Rx, [R14] into pipeline
- cmddatalong[2] = jtagarm7tdmi_instr_primitive(instr, 0);
-
- cmddatalong[3] = jtagarm7tdmi_instr_primitive(val+32, 0); // push 32-bit word on data bus - execute state
- cmddatalong[4] = jtagarm7tdmi_instr_primitive(val+16, 0); // push 32-bit word on data bus - execute state
- cmddatalong[5] = jtagarm7tdmi_instr_primitive(val, 0); // push 32-bit word on data bus - execute state
- cmddatalong[6] = jtagarm7tdmi_instr_primitive(val-16, 0); // push 32-bit word on data bus - execute state
-
- if (reg == ARM_REG_PC){
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
- }
- cmddatalong[9] = jtagarm7tdmi_instr_primitive(val-32, 0); // push 32-bit word on data bus - execute state
-
- retval = cmddatalong[5];
- return(retval);
-}
-
-
//! Get all registers. Return an array
unsigned long* jtagarm7tdmi_get_registers() {
- cmddatalong[1] = jtagarm7tdmi_instr_primitive(ARM_INSTR_SKANKREGS,0);
- cmddatalong[2] = jtagarm7tdmi_nop( 0);
- cmddatalong[3] = jtagarm7tdmi_nop( 0);
- cmddatalong[4] = jtagarm7tdmi_nop( 0);
- cmddatalong[5] = jtagarm7tdmi_nop( 0);
- cmddatalong[6] = jtagarm7tdmi_nop( 0);
- cmddatalong[7] = jtagarm7tdmi_nop( 0);
- cmddatalong[8] = jtagarm7tdmi_nop( 0);
- cmddatalong[9] = jtagarm7tdmi_nop( 0);
- cmddatalong[10] = jtagarm7tdmi_nop( 0);
- cmddatalong[11] = jtagarm7tdmi_nop( 0);
- cmddatalong[12] = jtagarm7tdmi_nop( 0);
- cmddatalong[13] = jtagarm7tdmi_nop( 0);
- cmddatalong[14] = jtagarm7tdmi_nop( 0);
- cmddatalong[15] = jtagarm7tdmi_nop( 0);
- cmddatalong[16] = jtagarm7tdmi_nop( 0);
- cmddatalong[17] = jtagarm7tdmi_nop( 0);
- cmddatalong[18] = jtagarm7tdmi_nop( 0);
- cmddatalong[19] = jtagarm7tdmi_nop( 0);
- cmddatalong[20] = jtagarm7tdmi_nop( 0);
+ debughex32(jtagarm7tdmi_instr_primitive(ARM_INSTR_SKANKREGS,0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
return registers;
}
//! Get all registers. Return an array
-unsigned long* jtagarm7tdmi_set_registers() {
- cmddatalong[1] = jtagarm7tdmi_instr_primitive(ARM_INSTR_SKANKREGS,0);
- cmddatalong[2] = jtagarm7tdmi_nop( 0);
- cmddatalong[3] = jtagarm7tdmi_nop( 0);
- cmddatalong[4] = jtagarm7tdmi_instr_primitive(0x40,0);
- cmddatalong[5] = jtagarm7tdmi_instr_primitive(0x41,0);
- cmddatalong[6] = jtagarm7tdmi_instr_primitive(0x42,0);
- cmddatalong[7] = jtagarm7tdmi_instr_primitive(0x43,0);
- cmddatalong[8] = jtagarm7tdmi_instr_primitive(0x44,0);
- cmddatalong[9] = jtagarm7tdmi_instr_primitive(0x45,0);
- cmddatalong[10] = jtagarm7tdmi_instr_primitive(0x46,0);
- cmddatalong[11] = jtagarm7tdmi_instr_primitive(0x47,0);
- cmddatalong[12] = jtagarm7tdmi_instr_primitive(0x48,0);
- cmddatalong[13] = jtagarm7tdmi_instr_primitive(0x49,0);
- cmddatalong[14] = jtagarm7tdmi_instr_primitive(0x4a,0);
- cmddatalong[15] = jtagarm7tdmi_instr_primitive(0x4b,0);
- cmddatalong[16] = jtagarm7tdmi_instr_primitive(0x4c,0);
- cmddatalong[17] = jtagarm7tdmi_instr_primitive(0x4d,0);
- cmddatalong[18] = jtagarm7tdmi_instr_primitive(0x4e,0);
- cmddatalong[19] = jtagarm7tdmi_instr_primitive(0x4f,0);
+unsigned long* jtagarm7tdmi_set_registers() { //FIXME: BORKEN... TOTALLY TRYING TO BUY A VOWEL
+ debughex32(jtagarm7tdmi_instr_primitive(ARM_INSTR_SKANKREGS,0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_nop( 0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x40,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x41,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x42,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x43,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x44,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x45,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x46,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x47,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x48,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x49,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4a,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4b,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4c,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4d,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4e,0));
+ debughex32(jtagarm7tdmi_instr_primitive(0x4f,0));
return registers;
}
Undefined instruction mode shadow registers
sp_und: 00000000 lr_und: 00000000 spsr_und: 300000df
>
-
+*/