+uint16_t jtag_dr_shift_16(uint16_t in);
+//! Stop JTAG, release pins
+void jtag_stop();
+//! Setup the JTAG pin directions.
+void jtag_setup();
+//! Ratchet Clock Down and Up
+void jtag_tcktock();
+//! Reset the target device
+void jtag_reset_target();
+//! TAP RESET
+void jtag_reset_tap();
+//! Get into the Shift-IR or Shift-DR
+void jtag_shift_register();
+//! Get into Capture-IR state
+void jtag_capture_ir();
+//! Get into Capture-DR state
+void jtag_capture_dr();
+//! Get to Run-Test-Idle without going through Test-Logic-Reset
+void jtag_run_test_idle();
+//! Detect instruction register width
+uint16_t jtag_detect_ir_width();
+//! Detects how many TAPs are in the JTAG chain
+uint16_t jtag_detect_chain_length();
+//! Gets device ID for specified chip in the chain
+uint32_t jtag_get_device_id(int chip);
+
+//Pins. Both SPI and JTAG names are acceptable.
+//#define SS BIT0
+#define MOSI BIT1
+#define MISO BIT2
+#define SCK BIT3
+
+#define TMS BIT0
+#define TDI BIT1
+#define TDO BIT2
+#define TCK BIT3
+
+#define TCLK TDI
+
+//These are not on P5
+#define RST BIT6
+#define TST BIT0
+
+//This could be more accurate.
+//Does it ever need to be?
+#define JTAGSPEED 20
+#define JTAGDELAY(x) delay(x)
+
+
+#define SETMOSI SPIOUT|=MOSI
+#define CLRMOSI SPIOUT&=~MOSI
+#define SETCLK SPIOUT|=SCK
+#define CLRCLK SPIOUT&=~SCK
+#define READMISO (SPIIN&MISO?1:0)
+#define SETTMS SPIOUT|=TMS
+#define CLRTMS SPIOUT&=~TMS
+#define SETTCK SPIOUT|=TCK
+#define CLRTCK SPIOUT&=~TCK
+#define SETTDI SPIOUT|=TDI
+#define CLRTDI SPIOUT&=~TDI
+
+#define SETTST P4OUT|=TST
+#define CLRTST P4OUT&=~TST
+#define SETRST P2OUT|=RST
+#define CLRRST P2OUT&=~RST
+
+#define SETTCLK SETTDI
+#define CLRTCLK CLRTDI
+
+extern int savedtclk;
+#define SAVETCLK savedtclk=SPIOUT&TCLK;
+#define RESTORETCLK if(savedtclk) SPIOUT|=TCLK; else SPIOUT&=~TCLK
+
+//JTAG commands
+#define JTAG_IR_SHIFT 0x80
+#define JTAG_DR_SHIFT 0x81
+#define JTAG_RESET_TAP 0x82
+#define JTAG_RESET_TARGET 0x83
+#define JTAG_DETECT_IR_WIDTH 0x84
+#define JTAG_DETECT_CHAIN_LENGTH 0x85
+#define JTAG_GET_DEVICE_ID 0x86
+//#define JTAG_DR_SHIFT20 0x91
+
+extern app_t const jtag_app;
+
+#endif