FreeCalypso > hg > fc-selenite
annotate helpers/srec4ram.c @ 134:7d50d8d13711
FFS code sync with Magnetite + gcc version fix
This change brings the new flash autodetection for FC and Pirelli targets
from Magnetite, and should also fix the gcc version for C1xx and gtamodem
targets, which were previously broken because they used TI's original
flash autodetect code (which operates at address 0) while the boot ROM
is mapped there.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 11 Dec 2018 08:43:25 +0000 |
parents | b493d3857f4e |
children |
rev | line source |
---|---|
11
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This ad hoc utility is used as part of building RAM-loadable |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * firmware images for targets with large RAM. It reads the ramimage.m0 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * S-record file produced by TI's hex470 post-linker and re-emits it |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * in another SREC form that is suitable for feeding to fc-xram. |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/types.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <ctype.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <string.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <strings.h> |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 char *infname; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 FILE *inf, *outf; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 char srecbuf[80]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 u_char srecbin[40], srecout[40]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 int lineno; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 decode_hex_byte(s) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 char *s; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 register int u, l; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 if (!isxdigit(s[0]) || !isxdigit(s[1])) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 return(-1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 if (isdigit(s[0])) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 u = s[0] - '0'; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 else if (isupper(s[0])) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 u = s[0] - 'A' + 10; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 else |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 u = s[0] - 'a' + 10; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 if (isdigit(s[1])) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 l = s[1] - '0'; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 else if (isupper(s[1])) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 l = s[1] - 'A' + 10; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 else |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 l = s[1] - 'a' + 10; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 return((u << 4) | l); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 srec2bin() |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 register int i, l, b; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 l = decode_hex_byte(srecbuf + 2); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 if (l < 1) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 fprintf(stderr, "%s line %d: S-record length octet is bad\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 srecbin[0] = l; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 if (l > 35) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 fprintf(stderr, |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 "%s line %d: S-record is longer than expected\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 for (i = 1; i <= l; i++) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 b = decode_hex_byte(srecbuf + i*2 + 2); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 if (b < 0) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 fprintf(stderr, "%s line %d: hex decode error\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 srecbin[i] = b; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 return(0); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 srec_cksum() |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 u_char accum; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 register int i, len; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 len = srecbin[0] + 1; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 accum = 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 for (i = 0; i < len; i++) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 accum += srecbin[i]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 if (accum != 0xFF) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 fprintf(stderr, "%s line %d: bad checksum\n", infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 return(0); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 emit_output_srec(type, buf) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 u_char *buf; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 int i; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 u_char accum = 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 putc('S', outf); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 putc(type, outf); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 for (i = 0; i < buf[0]; i++) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 fprintf(outf, "%02X", buf[i]); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 accum += buf[i]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 fprintf(outf, "%02X\n", ~accum & 0xFF); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 return 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 transform_s3() |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 int datalen; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 u_char *sp, *dp; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 int i; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (srecbin[0] < 6) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 fprintf(stderr, |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 "%s line %d: S3 record is too short\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 datalen = srecbin[0] - 5; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 if (datalen & 1) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 fprintf(stderr, "%s line %d: odd data length\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 sp = srecbin; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 dp = srecout; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 for (i = 0; i < 5; i++) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 *dp++ = *sp++; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 for (i = 0; i < datalen; i += 2) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 dp[0] = sp[1]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 dp[1] = sp[0]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 sp += 2; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 dp += 2; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 return 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 generate_vectors_record() |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 u_char *dp; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 u_long addr; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 int i; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 srecout[0] = 28 + 5; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 srecout[1] = 0x00; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 srecout[2] = 0x80; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 srecout[3] = 0x00; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 srecout[4] = 0x00; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 dp = srecout + 5; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 for (i = 0; i < 7; i++) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 addr = 0x01004000 + i * 4; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 *dp++ = addr; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 *dp++ = addr >> 8; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 *dp++ = addr >> 16; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 *dp++ = addr >> 24; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 emit_output_srec('3', srecout); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 return 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 generate_jump_record() |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 srecout[0] = 5; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 srecout[1] = 0x01; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 srecout[2] = 0x00; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 srecout[3] = 0x40; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 srecout[4] = 0x58; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 emit_output_srec('7', srecout); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 return 0; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 main(argc, argv) |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 char **argv; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 if (argc < 2 || argc > 3) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 fprintf(stderr, "usage: %s input.m0 [output.srec]\n", argv[0]); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 infname = argv[1]; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 inf = fopen(infname, "r"); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (!inf) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 perror(infname); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 if (argc > 2) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 outf = fopen(argv[2], "w"); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 if (!outf) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 perror(argv[2]); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 } else |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 outf = stdout; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 for (lineno = 1; ; lineno++) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 if (!fgets(srecbuf, sizeof srecbuf, inf)) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 fprintf(stderr, "%s: premature EOF\n", infname); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if (srecbuf[0] != 'S') { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 fprintf(stderr, "%s line %d: not an S-record\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 infname, lineno); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 srec2bin(); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 srec_cksum(); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 switch (srecbuf[1]) { |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 case '0': |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 emit_output_srec('0', srecbin); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 continue; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 case '3': |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 transform_s3(); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 emit_output_srec('3', srecout); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 continue; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 case '7': |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 break; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 default: |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 fprintf(stderr, "%s line %d: unexpected S%c record\n", |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 infname, lineno, srecbuf[1]); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 exit(1); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 break; |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 } |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 generate_vectors_record(); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 generate_jump_record(); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 exit(0); |
b493d3857f4e
helpers: initial import from Magnetite (pruned)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 } |