FreeCalypso > hg > fc-magnetite
annotate helpers/srec4ram.c @ 605:07d0dc4431f4
bootloader.s: same MEMIF fix as in int.s plus DPLL BYPASS fix
Both MEMIF and DPLL settings are now the same between int.s and bootloader.s
assembly code paths. Previously bootloader.s was setting DPLL BYPASS /2 mode,
which persisted until _INT_Initialize code with the bootloader body omitted,
or was changed to /1 in the hardware init function in the
bootloader.lib:start.obj module.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 17 Jun 2019 18:40:32 +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 } |