Add support for input-only lines (-)
authorKeith Packard <keithp@keithp.com>
Tue, 9 Dec 2008 01:25:28 +0000 (17:25 -0800)
committerKeith Packard <keithp@keithp.com>
Tue, 9 Dec 2008 01:25:28 +0000 (17:25 -0800)
ccdbg.c
ccdbg.h
chip_id
get_status
p1_1
rd_config

diff --git a/ccdbg.c b/ccdbg.c
index 39fc1016becd3becc60a3cce237dd67995f246c1..6462739a56b08747d55fe74aa6a5337c1c8a05a6 100644 (file)
--- a/ccdbg.c
+++ b/ccdbg.c
 
 #include "ccdbg.h"
 
-static uint8_t
-get_bit(char *line, int i, char on, uint8_t bit)
+static void
+get_bit(char *line, int i, char on, uint8_t bit, uint8_t *bits, uint8_t *masks)
 {
-       if (line[i] == on)
-               return bit;
-       if (line[i] == '.')
-               return 0;
+       if (line[i] == on) {
+               *bits |= bit;
+               *masks |= bit;
+               return;
+       }
+       if (line[i] == '.') {
+               *masks |= bit;
+               return;
+       }
+       if (line[i] == '-') {
+               return;
+       }
        fprintf(stderr, "bad line %s\n", line);
        exit (1);
 }
 
 static char
-is_bit(uint8_t get, char on, uint8_t bit)
+is_bit(uint8_t get, uint8_t mask, char on, uint8_t bit)
 {
-       if (get&bit)
-               return on;
-       else
-               return '.';
+       if (mask&bit) {
+               if (get&bit)
+                       return on;
+               else
+                       return '.';
+       } else
+               return '-';
 }
 
 static uint8_t
-ccdbg_write_read(struct ccdbg *dbg, uint8_t set)
-{
-       uint8_t get;
-
-       ccdbg_write(dbg, CC_DATA|CC_CLOCK|CC_RESET_N, set);
-       get = ccdbg_read(dbg);
-       printf("%c %c %c -> %c %c %c\n",
-              is_bit(set, 'C', CC_CLOCK),
-              is_bit(set, 'D', CC_DATA),
-              is_bit(set, 'R', CC_RESET_N),
-              is_bit(get, 'C', CC_CLOCK),
-              is_bit(get, 'D', CC_DATA),
-              is_bit(get, 'R', CC_RESET_N));
+ccdbg_write_read(struct ccdbg *dbg, uint8_t set, uint8_t mask)
+{
+       uint8_t get = set;
+
+       if (mask != (CC_DATA|CC_CLOCK|CC_RESET_N))
+               get = ccdbg_read(dbg);
+       ccdbg_write(dbg, mask, set);
+       printf ("%c %c %c",
+               is_bit(set, mask, 'C', CC_CLOCK),
+               is_bit(set, mask, 'D', CC_DATA),
+               is_bit(set, mask, 'R', CC_RESET_N));
+       if (mask != (CC_DATA|CC_CLOCK|CC_RESET_N))
+               printf(" -> %c %c %c",
+                      is_bit(get, 0xf, 'C', CC_CLOCK),
+                      is_bit(get, 0xf, 'D', CC_DATA),
+                      is_bit(get, 0xf, 'R', CC_RESET_N));
+       printf("\n");
        ccdbg_half_clock(dbg);
        return get;
 }
@@ -62,29 +77,29 @@ _ccdbg_debug_mode(struct ccdbg *dbg)
        printf ("#\n");
        printf ("# Debug mode\n");
        printf ("#\n");
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N);
-       ccdbg_write_read(dbg,          CC_DATA           );
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           );
-       ccdbg_write_read(dbg,          CC_DATA           );
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           );
-       ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg,          CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg,          CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
 }
 
 static void
 _ccdbg_reset(struct ccdbg *dbg)
 {
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N);
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           );
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           );
-       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
 }
 
 static void
 _ccdbg_send_bit(struct ccdbg *dbg, uint8_t bit)
 {
        if (bit) bit = CC_DATA;
-       ccdbg_write_read(dbg, CC_CLOCK|bit|CC_RESET_N);
-       ccdbg_write_read(dbg,          bit|CC_RESET_N);
+       ccdbg_write_read(dbg, CC_CLOCK|bit|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_write_read(dbg,          bit|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
 }
 
 static void
@@ -135,8 +150,8 @@ _ccdbg_read_bits(struct ccdbg *dbg, int bits)
        printf ("# Read %d bits\n", bits);
        printf ("#\n");
        for (bit = 0; bit < bits; bit++) {
-                     ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N);
-               get = ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N);
+                     ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_RESET_N);
+               get = ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N, CC_CLOCK|CC_RESET_N);
                val <<= 1;
                if (get & CC_DATA)
                        val |= 1;
@@ -208,7 +223,7 @@ static void
 ccdbg_manual(struct ccdbg *dbg, FILE *input)
 {
        char    line[80];
-       uint8_t set;
+       uint8_t set, mask;
 
        while (fgets(line, sizeof line, input)) {
                if (line[0] == '#' || line[0] == '\n') {
@@ -216,10 +231,11 @@ ccdbg_manual(struct ccdbg *dbg, FILE *input)
                        continue;
                }
                set = 0;
-               set |= get_bit(line, 0, 'C', CC_CLOCK);
-               set |= get_bit(line, 2, 'D', CC_DATA);
-               set |= get_bit(line, 4, 'R', CC_RESET_N);
-               ccdbg_write_read(dbg, set);
+               mask = 0;
+               get_bit(line, 0, 'C', CC_CLOCK, &set, &mask);
+               get_bit(line, 2, 'D', CC_DATA, &set, &mask);
+               get_bit(line, 4, 'R', CC_RESET_N, &set, &mask);
+               ccdbg_write_read(dbg, set, mask);
        }
 }
 
diff --git a/ccdbg.h b/ccdbg.h
index 19cf8fa3fe7a29ca503e7ddde5ceb678f0bef575..90d6d25b65efc011b6057ee8eb764d09117ccb2f 100644 (file)
--- a/ccdbg.h
+++ b/ccdbg.h
@@ -45,7 +45,7 @@
 
 
 /* painfully slow for now */
-#define CC_CLOCK_US    (100 * 1000)
+#define CC_CLOCK_US    (100)
 
 struct ccdbg {
        usb_dev_handle  *usb_dev;
diff --git a/chip_id b/chip_id
index 4343cec27f9cda1836516a437bff26e58f2da2cd..6e54a3745558fc5dcb8f7d88f14f472aefbe0be0 100644 (file)
--- a/chip_id
+++ b/chip_id
@@ -33,82 +33,37 @@ C . R       0
 # start reading again
 
 C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
index 3ca4a303ac791a4e94bc1e034571cbd3a189386f..1d4ff03d3a3f0ac210338bf1cedb24a767672ac8 100644 (file)
@@ -9,20 +9,61 @@ C D .
 . D R
 
 #
-# GET_STATUS
+# Halt 0x44
 #
 
 C . R  0
 . . R
+C D R  1
+. D R
+C . R  0
+. . R
+C . R  0
+. . R
+
 C . R  0
 . . R
 C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+# status byte
+
+C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+# Resume 0x4c
+#
+
+C . R  0
+. . R
 C D R  1
 . D R
-
 C . R  0
 . . R
+C . R  0
+. . R
+
+C D R  1
+. D R
 C D R  1
 . D R
 C . R  0
@@ -30,42 +71,259 @@ C . R      0
 C . R  0
 . . R
 
+# status byte
+
+C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
 #
-# Now read for a while
+# READ_STATUS
 #
 
-C D R
-. D R
-C D R
-. D R
-C D R
+C . R  0
+. . R
+C . R  0
+. . R
+C D R  1
 . D R
-C D R
+C D R  1
 . D R
 
-C D R
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+#
+# status
+#
+
 C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+#
+# READ_STATUS
+#
+
+C . R  0
+. . R
+C . R  0
+. . R
+C D R  1
 . D R
-C D R
+C D R  1
 . D R
-C D R
+
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+#
+# status
+#
 
 C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+#
+# READ_STATUS
+#
+
+C . R  0
+. . R
+C . R  0
+. . R
+C D R  1
 . D R
-C D R
+C D R  1
 . D R
-C D R
+
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+#
+# status
+#
+
 C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+#
+# Halt 0x44
+#
+
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
 
-C D R
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+# status byte
+
 C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+#
+# READ_STATUS
+#
+
+C . R  0
+. . R
+C . R  0
+. . R
+C D R  1
 . D R
-C D R
+C D R  1
 . D R
-C D R
+
+C . R  0
+. . R
+C D R  1
 . D R
+C . R  0
+. . R
+C . R  0
+. . R
+
+#
+# status
+#
+
+C D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
diff --git a/p1_1 b/p1_1
index 05ded5cbf11089c0a70cb412ea9f70abb4be99b7..2deeaad71440c3046044245ac2062bc401f65165 100644 (file)
--- a/p1_1
+++ b/p1_1
@@ -23,22 +23,22 @@ C . R       0
 # status byte
 
 C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
 #
 # DEBUG_INSTR
@@ -126,22 +126,22 @@ C . R     0
 # status byte
 
 C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
 #
 # DEBUG_INSTR
@@ -228,22 +228,22 @@ C D R     1
 # status byte
 
 C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
 #
 # DEBUG_INSTR
@@ -330,20 +330,21 @@ C D R     1
 # status byte
 
 C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
+C - R
+. - R
 
+C D R
index 9bb1cbe93aeb368f07267a7ec0995a1fa81deb0d..7f8686fe79d81fe73b71c4bbb2b1be8c275c95a0 100644 (file)
--- a/rd_config
+++ b/rd_config
@@ -51,21 +51,3 @@ C D R
 . D R
 C D R
 . D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R
-C D R
-. D R