1 /* Monitor JTAG signals instead of using physical cable
2 
3 Copyright (C) 2004 Andrew Rogers
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
18 
19 
20 
21 #include <stdio.h>
22 
23 #include "iodebug.h"
24 
25 using namespace std;
26 
txrx(bool tms,bool tdi)27 bool IODebug::txrx(bool tms, bool tdi)
28 {
29   int tdo;
30   fprintf(stderr, "txrx(%d,%d) enter tdo>",tms,tdi);
31   scanf("%d",&tdo);
32   return tdo!=0;
33 }
34 
tx(bool tms,bool tdi)35 void IODebug::tx(bool tms, bool tdi)
36 {
37   fprintf(stderr, "tx(%d,%d)\n",tms,tdi);
38 
39 }
40 
tx_tdi_byte(unsigned char tdi_byte)41 void IODebug::tx_tdi_byte(unsigned char tdi_byte) {
42 }
txrx_block(const unsigned char * tdi,unsigned char * tdo,int length,bool last)43 void IODebug::txrx_block(const unsigned char *tdi, unsigned char *tdo,
44 			 int length, bool last)
45 {
46   int i=0;
47   int j=0;
48   unsigned char tdo_byte=0;
49   unsigned char tdi_byte=tdi[j];
50   while(i<length-1){
51     tdo_byte=tdo_byte+(txrx(false, (tdi_byte&1)==1)<<(i%8));
52     tdi_byte=tdi_byte>>1;
53     i++;
54     if((i%8)==0){ // Next byte
55       tdo[j]=tdo_byte; // Save the TDO byte
56       tdo_byte=0;
57       j++;
58       tdi_byte=tdi[j]; // Get the next TDI byte
59     }
60   };
61   tdo_byte=tdo_byte+(txrx(last, (tdi_byte&1)==1)<<(i%8));
62   tdo[j]=tdo_byte;
63   return;
64 }
65 
tx_tms(unsigned char * pat,int length,int force)66 void IODebug::tx_tms(unsigned char *pat, int length, int force)
67 {
68     int i;
69     unsigned char tms = pat[0];
70     for (i = 0; i < length; i++)
71     {
72 	tx((tms & 0x01),false);
73 	tms = tms >> 1;
74     }
75 }
76