4 * 'low cost jtag parallel programming cable'
6 * author: hackbard@hackdaworld.org
17 #define TMS (1<<2) /* d2 */
18 #define TDI (1<<0) /* d0 */
19 #define TCK (1<<1) /* d1 */
20 #define TDO (1<<4) /* select in */
22 #define JTAG_INITIALIZED 0x01
27 typedef unsigned char u8;
28 typedef unsigned short int u16;
29 typedef unsigned int u32;
31 typedef struct s_jtag {
36 int jtag_set_port(t_jtag *jtag,u16 port) {
43 int jtag_init(t_jtag *jtag) {
51 ret=ioperm(jtag->port,2,TRUE);
63 u8 jtag_act(t_jtag *jtag,u8 tms,u8 tdi) {
71 if(tms) out|=(1<<TMS);
72 if(tdi) out|=(1<<TDI);
75 outb((out|TCK),jtag->port);
80 tdo=inb(jtag->port+1);
81 printf("%0x2 %c | ",tdo,((tdo<0x20)|(tdo>0x7e))?'.':tdo);
82 for(i=0;i<8;i++) printf("%d ",((tdo<<(7-i))&0x01)?1:0);
88 int jtag_reset(t_jtag *jtag) {
92 for(i=0;i<5;i++) jtag_act(jtag,1,0);
97 int jtag_shift_dr(t_jtag *jtag) {
99 /* assume 'test logic reset' status */
109 int main(int argc,char **argv) {
118 jtag_shift_dr(&jtag);
120 for(i=0;i<32;i++) jtag_act(&jtag,0,0);