Updates to ARM7TDMI JTAG app and optimizations for debughex() and added debughex32...
[goodfet] / firmware / apps / jtag / jtagarm7tdmi.c
index 776029b..cf85067 100644 (file)
@@ -139,21 +139,21 @@ unsigned long jtagarm7tdmi_start() {
   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();
 }
@@ -507,41 +507,22 @@ void jtagarm7tdmi_disable_watchpoint1(){
 
 
 /******************** 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);
 }
@@ -550,137 +531,92 @@ unsigned long jtagarm7tdmi_exec(unsigned long instr, unsigned long parameter, un
 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;
 }
 
@@ -1334,4 +1270,4 @@ IRQ mode shadow registers
 Undefined instruction mode shadow registers
   sp_und: 00000000   lr_und: 00000000 spsr_und: 300000df
 >
-
+*/