summaryrefslogtreecommitdiff
path: root/tool/p8bin2hex.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tool/p8bin2hex.c18
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}