diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h
index 4f34806225e37c8cf379c3eb1bceefdf8b7b9939..f33e050113f2c79d7d82062d28eb5b8b0d3e01d4 100644
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -41,20 +41,37 @@
 #endif
 
 
-/* 16 Tap States, from page 21 of ASSET InterTech, Inc.'s svf.pdf
+/*
+ * Tap states from ARM7TDMI-S Technical reference manual.
+ * Also, validated against several other ARM core technical manuals.
+ *
+ * N.B. tap_get_tms_path() was changed to reflect this corrected
+ * numbering and ordering of the TAP states.
  */
-enum tap_state {
-	TAP_RESET    = 0, TAP_IDLE = 8,
-	TAP_DRSELECT = 1, TAP_DRCAPTURE = 2, TAP_DRSHIFT = 3, TAP_DREXIT1 = 4,
-	TAP_DRPAUSE  = 5, TAP_DREXIT2 = 6, TAP_DRUPDATE = 7,
-	TAP_IRSELECT = 9, TAP_IRCAPTURE = 10, TAP_IRSHIFT = 11, TAP_IREXIT1 = 12,
-	TAP_IRPAUSE  = 13, TAP_IREXIT2 = 14, TAP_IRUPDATE = 15,
-
-	TAP_NUM_STATES = 16, TAP_INVALID = -1,
-};
-
-typedef enum tap_state tap_state_t;
-
+typedef enum tap_state
+{
+	TAP_DREXIT2 = 0x0,
+	TAP_DREXIT1 = 0x1,
+	TAP_DRSHIFT = 0x2,
+	TAP_DRPAUSE = 0x3,
+	TAP_IRSELECT = 0x4,
+	TAP_DRUPDATE = 0x5,
+	TAP_DRCAPTURE = 0x6,
+	TAP_DRSELECT = 0x7,
+	TAP_IREXIT2 = 0x8,
+	TAP_IREXIT1 = 0x9,
+	TAP_IRSHIFT = 0xa,
+	TAP_IRPAUSE = 0xb,
+	TAP_IDLE = 0xc,
+	TAP_IRUPDATE = 0xd,
+	TAP_IRCAPTURE = 0xe,
+	TAP_RESET = 0x0f,
+
+	TAP_NUM_STATES = 0x10,
+
+	TAP_INVALID = -1,
+} tap_state_t;
+ 
 typedef struct tap_transition_s
 {
 	tap_state_t high;