diff options
Diffstat (limited to 'tool')
| -rw-r--r-- | tool/p8bin2hex.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/tool/p8bin2hex.c b/tool/p8bin2hex.c index 8d28d19..4ef10fc 100644 --- a/tool/p8bin2hex.c +++ b/tool/p8bin2hex.c | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | * 00.xxx.xxx data lo (bits 5:0 contain data 5:0) | 14 | * 00.xxx.xxx data lo (bits 5:0 contain data 5:0) |
| 15 | * <repeat any number of [address, data] pairs> | 15 | * <repeat any number of [address, data] pairs> |
| 16 | * | 16 | * |
| 17 | * FIXME: RIM format currently almost always fails with bad checksum | ||
| 18 | * | ||
| 17 | * BIN format: | 19 | * BIN format: |
| 18 | * 10.000.000 leader/trailer (at least an inch of these) | 20 | * 10.000.000 leader/trailer (at least an inch of these) |
| 19 | * 11.011.000 "field" (bits 6:4 specify address 14:12) | 21 | * 11.011.000 "field" (bits 6:4 specify address 14:12) |
| @@ -47,14 +49,11 @@ load(FILE *fp) | |||
| 47 | case Addr: | 49 | case Addr: |
| 48 | u += c; | 50 | u += c; |
| 49 | a |= c; | 51 | a |= c; |
| 50 | fprintf(stderr, " %04o: address %06o\n", c, a & 077777); | ||
| 51 | s = Fetch; | 52 | s = Fetch; |
| 52 | break; | 53 | break; |
| 53 | case Data: | 54 | case Data: |
| 54 | u += c; | 55 | u += c; |
| 55 | d |= 0x8000 | c; | 56 | d |= 0x8000 | c; |
| 56 | /* fprintf(stderr, " %04o: data %05o\n", c, d & 07777); */ | ||
| 57 | fprintf(stderr, " %04o", c); | ||
| 58 | s = Fetch; | 57 | s = Fetch; |
| 59 | break; | 58 | break; |
| 60 | case Fetch: | 59 | case Fetch: |
| @@ -64,20 +63,17 @@ load(FILE *fp) | |||
| 64 | if ((d & 07777) != (t & 07777)) | 63 | if ((d & 07777) != (t & 07777)) |
| 65 | fprintf(stderr, "\nbad checksum %05o\n", t & 07777); | 64 | fprintf(stderr, "\nbad checksum %05o\n", t & 07777); |
| 66 | else | 65 | else |
| 67 | v = 1, fprintf(stderr, "\nvalid checksum %05o\n", t & 07777); | 66 | v = 1; |
| 68 | } | 67 | } |
| 69 | fprintf(stderr, " %04o", c); | ||
| 70 | goto leadout; | 68 | goto leadout; |
| 71 | } | 69 | } |
| 72 | t += u; | 70 | t += u; |
| 73 | u = 0; | 71 | u = 0; |
| 74 | if (d & 0x8000) { | 72 | if (d & 0x8000) { |
| 75 | fprintf(stderr, ": mem[%06o]=%05o\n", a & 077777, d & 07777); | ||
| 76 | mem[a] = d & 07777; | 73 | mem[a] = d & 07777; |
| 77 | a = (a & ~07777) | ((a + 1) & 07777); | 74 | a = (a & ~07777) | ((a + 1) & 07777); |
| 78 | d = 0; | 75 | d = 0; |
| 79 | } | 76 | } |
| 80 | fprintf(stderr, " %04o", c); | ||
| 81 | if ((c & 0300) == 0000) { | 77 | if ((c & 0300) == 0000) { |
| 82 | u = c; | 78 | u = c; |
| 83 | d = (c & 077) << 6; | 79 | d = (c & 077) << 6; |
| @@ -92,24 +88,19 @@ load(FILE *fp) | |||
| 92 | } | 88 | } |
| 93 | if ((c & 0307) == 0300) { | 89 | if ((c & 0307) == 0300) { |
| 94 | a = ((c & 0070) << 9) | (a & 07777); | 90 | a = ((c & 0070) << 9) | (a & 07777); |
| 95 | fprintf(stderr, ": field %o address %06o\n", (c & 070) >> 3, a & 077777); | ||
| 96 | break; | 91 | break; |
| 97 | } | 92 | } |
| 98 | if (c == 0377) { | 93 | if (c == 0377) { |
| 99 | fprintf(stderr, ": skipping: "); | ||
| 100 | s = Skip; | 94 | s = Skip; |
| 101 | break; | 95 | break; |
| 102 | } | 96 | } |
| 103 | fprintf(stderr, ": unknown byte at %d\n", n); | ||
| 104 | break; | 97 | break; |
| 105 | case Leader: | 98 | case Leader: |
| 106 | leader: | 99 | leader: |
| 107 | if (c != 0200) { | 100 | if (c != 0200) { |
| 108 | fprintf(stderr, ": end leader\n"); | ||
| 109 | s= Fetch; | 101 | s= Fetch; |
| 110 | goto fetch; | 102 | goto fetch; |
| 111 | } | 103 | } |
| 112 | fprintf(stderr, " %04o", c); | ||
| 113 | break; | 104 | break; |
| 114 | case Skip: | 105 | case Skip: |
| 115 | if (c == 0377) { | 106 | if (c == 0377) { |
| @@ -124,13 +115,12 @@ load(FILE *fp) | |||
| 124 | s = Leader; | 115 | s = Leader; |
| 125 | goto leader; | 116 | goto leader; |
| 126 | } | 117 | } |
| 127 | fprintf(stderr, " %04o", c); | ||
| 128 | break; | 118 | break; |
| 129 | } | 119 | } |
| 130 | } | 120 | } |
| 131 | leadout: | 121 | leadout: |
| 132 | while ((c = getc(fp)) != EOF) | 122 | while ((c = getc(fp)) != EOF) |
| 133 | fprintf(stderr, " %04o", c); | 123 | ; |
| 134 | putchar('\n'); | 124 | putchar('\n'); |
| 135 | return v; | 125 | return v; |
| 136 | } | 126 | } |
