FreeCalypso > hg > fc-magnetite
annotate helpers/srec4ram.c @ 638:cab2f315827e
FFS dev.c: added Spansion PL032J to the "generic" table
With the discovery of first GTM900 and then Tango, it now appears that
Openmoko was not the only manuf after all who kept TI's TCS211 firmware
largely intact (as opposed to changing it beyond all recognition like
Compal, Chi-Mei and BenQ did), thus we are now getting new "alien" targets
on which we reuse the original manuf's FFS with IMEI and RF calibration
tables as if it were native. On these targets we use the original
device table for FFS, even though we previously thought that it would
never apply to any target other than dsample, leonardo and gtamodem.
We have previously added Samsung K5L33xxCAM (a new kind of multi-ID device)
to the generic table to support its use in Huawei GTM900-B modules; now
we got news that some slightly older GTM900-B specimen used S71PL032J
instead, so we are now adding PL032J as well.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 30 Jan 2020 17:45:48 +0000 |
parents | 40b08f6cb2b8 |
children |
rev | line source |
---|---|
92
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This ad hoc utility is used as part of building RAM-loadable |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * firmware images for targets with large RAM. It reads the ramimage.m0 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * S-record file produced by TI's hex470 post-linker and re-emits it |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * in another SREC form that is suitable for feeding to fc-xram. |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/types.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <ctype.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <string.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <strings.h> |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 char *infname; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 FILE *inf, *outf; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 char srecbuf[80]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 u_char srecbin[40], srecout[40]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 int lineno; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 decode_hex_byte(s) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 char *s; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 register int u, l; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 if (!isxdigit(s[0]) || !isxdigit(s[1])) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 return(-1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 if (isdigit(s[0])) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 u = s[0] - '0'; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 else if (isupper(s[0])) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 u = s[0] - 'A' + 10; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 else |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 u = s[0] - 'a' + 10; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 if (isdigit(s[1])) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 l = s[1] - '0'; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 else if (isupper(s[1])) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 l = s[1] - 'A' + 10; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 else |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 l = s[1] - 'a' + 10; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 return((u << 4) | l); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 srec2bin() |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 register int i, l, b; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 l = decode_hex_byte(srecbuf + 2); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 if (l < 1) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 fprintf(stderr, "%s line %d: S-record length octet is bad\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 srecbin[0] = l; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 if (l > 35) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 fprintf(stderr, |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 "%s line %d: S-record is longer than expected\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 for (i = 1; i <= l; i++) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 b = decode_hex_byte(srecbuf + i*2 + 2); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 if (b < 0) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 fprintf(stderr, "%s line %d: hex decode error\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 srecbin[i] = b; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 return(0); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 srec_cksum() |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 u_char accum; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 register int i, len; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 len = srecbin[0] + 1; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 accum = 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 for (i = 0; i < len; i++) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 accum += srecbin[i]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 if (accum != 0xFF) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 fprintf(stderr, "%s line %d: bad checksum\n", infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 return(0); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 emit_output_srec(type, buf) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 u_char *buf; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 int i; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 u_char accum = 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 putc('S', outf); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 putc(type, outf); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 for (i = 0; i < buf[0]; i++) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 fprintf(outf, "%02X", buf[i]); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 accum += buf[i]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 fprintf(outf, "%02X\n", ~accum & 0xFF); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 return 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 transform_s3() |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 int datalen; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 u_char *sp, *dp; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 int i; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (srecbin[0] < 6) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 fprintf(stderr, |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 "%s line %d: S3 record is too short\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 datalen = srecbin[0] - 5; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 if (datalen & 1) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 fprintf(stderr, "%s line %d: odd data length\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 sp = srecbin; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 dp = srecout; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 for (i = 0; i < 5; i++) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 *dp++ = *sp++; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 for (i = 0; i < datalen; i += 2) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 dp[0] = sp[1]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 dp[1] = sp[0]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 sp += 2; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 dp += 2; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 return 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 generate_vectors_record() |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 u_char *dp; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 u_long addr; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 int i; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 srecout[0] = 28 + 5; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 srecout[1] = 0x00; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 srecout[2] = 0x80; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 srecout[3] = 0x00; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 srecout[4] = 0x00; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 dp = srecout + 5; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 for (i = 0; i < 7; i++) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 addr = 0x01004000 + i * 4; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 *dp++ = addr; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 *dp++ = addr >> 8; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 *dp++ = addr >> 16; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 *dp++ = addr >> 24; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 emit_output_srec('3', srecout); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 return 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 generate_jump_record() |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 srecout[0] = 5; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 srecout[1] = 0x01; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 srecout[2] = 0x00; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 srecout[3] = 0x40; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 srecout[4] = 0x58; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 emit_output_srec('7', srecout); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 return 0; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 main(argc, argv) |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 char **argv; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 if (argc < 2 || argc > 3) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 fprintf(stderr, "usage: %s input.m0 [output.srec]\n", argv[0]); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 infname = argv[1]; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 inf = fopen(infname, "r"); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (!inf) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 perror(infname); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 if (argc > 2) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 outf = fopen(argv[2], "w"); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 if (!outf) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 perror(argv[2]); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 } else |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 outf = stdout; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 for (lineno = 1; ; lineno++) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 if (!fgets(srecbuf, sizeof srecbuf, inf)) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 fprintf(stderr, "%s: premature EOF\n", infname); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if (srecbuf[0] != 'S') { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 fprintf(stderr, "%s line %d: not an S-record\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 infname, lineno); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 srec2bin(); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 srec_cksum(); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 switch (srecbuf[1]) { |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 case '0': |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 emit_output_srec('0', srecbin); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 continue; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 case '3': |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 transform_s3(); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 emit_output_srec('3', srecout); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 continue; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 case '7': |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 break; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 default: |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 fprintf(stderr, "%s line %d: unexpected S%c record\n", |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 infname, lineno, srecbuf[1]); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 exit(1); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 break; |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 } |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 generate_vectors_record(); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 generate_jump_record(); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 exit(0); |
40b08f6cb2b8
srec4ram helper utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 } |