From: Keith Packard Date: Tue, 9 Dec 2008 01:25:28 +0000 (-0800) Subject: Add support for input-only lines (-) X-Git-Tag: 0.5~58^2~104 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=e64b4dbf15e9ee1cb0de002985de7575e83d46e9 Add support for input-only lines (-) --- diff --git a/ccdbg.c b/ccdbg.c index 39fc1016..6462739a 100644 --- a/ccdbg.c +++ b/ccdbg.c @@ -18,40 +18,55 @@ #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 19cf8fa3..90d6d25b 100644 --- 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 4343cec2..6e54a374 100644 --- 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 diff --git a/get_status b/get_status index 3ca4a303..1d4ff03d 100644 --- a/get_status +++ b/get_status @@ -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 05ded5cb..2deeaad7 100644 --- 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 diff --git a/rd_config b/rd_config index 9bb1cbe9..7f8686fe 100644 --- 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